home *** CD-ROM | disk | FTP | other *** search
/ ShareWare OnLine 2 / ShareWare OnLine Volume 2 (CMS Software)(1993).iso / prog / inter35b.zip / INTERRUP.F < prev    next >
Text File  |  1993-06-05  |  329KB  |  8,751 lines

  1. Interrupt List, part 6 of 9
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. --------D-22---------------------------------
  4. INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
  5. Desc:    this vector specifies the address of the routine which is to be given
  6.       control after a program is terminated; it should never be called
  7.       directly, since it does not point at an interrupt handler
  8. Notes:    this vector is restored from the DWORD at offset 0Ah in the PSP during
  9.       termination, and then a FAR JMP is performed to the address in INT 22
  10.     normally points at the instruction immediately following INT 21/AH=4Bh
  11.       call which loaded the current program
  12. SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
  13. --------G-22---------------------------------
  14. INT 22 - COMTROL HOSTESS i/ISA DEBUGGER - CHANGE FIRMWARE DEBUGGING PORT
  15.     AL = new firmware debugging port
  16. Return: ???
  17. SeeAlso: INT 21"COMTROL HOSTESS",INT 23"COMTROL HOSTESS"
  18. --------D-23---------------------------------
  19. INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
  20. ---DOS 1.x---
  21. Return: AH = 00h abort program
  22.     if all registers preserved, restart DOS call
  23. ---DOS 2+---
  24.     CF clear
  25. Return: all registers preserved
  26.     return via RETF or RETF 2 with CF set
  27.         DOS will abort program with errorlevel 0
  28.     else (RETF/RETF 2 with CF clear or IRET)
  29.         interrupted DOS call is restarted
  30. Notes:    this interrupt is invoked whenever DOS detects a ^C or ^Break; it
  31.       should never be called directly
  32.     MS-DOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
  33.     DOS remembers the stack pointer before calling INT 23, and if it is
  34.       not the same on return, pops and discards the top word; this is what
  35.       permits a return with RETF as well as IRET or RETF 2
  36.     any DOS call may safely be made within the INT 23 handler, although
  37.       the handler must to check for a recursive invocation if it does
  38.       call DOS
  39. SeeAlso: INT 1B
  40. --------G-23---------------------------------
  41. INT 23 - COMTROL HOSTESS i/ISA DEBUGGER - GET CONFIGURATION INFORMATION
  42.     AL = query type
  43.         00h get old config map
  44.         Return: AX = old config map
  45.         01h get dual-ported RAM map
  46.         Return: BX:AX = dual-ported RAM map
  47.         02h get SCC port map
  48.         Return: BX:AX = SCC port map
  49. SeeAlso: INT 22"COMTROL HOSTESS",INT 26"COMTROL HOSTESS"
  50. --------D-24---------------------------------
  51. INT 24 - DOS 1+ - CRITICAL ERROR HANDLER
  52. Note:    invoked when a critical (usually hardware) error is encountered; should
  53.       never be called directly
  54. SeeAlso: INT 21/AH=95h
  55.  
  56. Critical error handler is invoked with:
  57.     AH = type and processing flags
  58.         bit 7 clear = disk I/O error
  59.           set    = -- if block device, bad FAT image in memory
  60.               -- if char device, error code in DI
  61.         bit 6  unused
  62.         bit 5 = 1 if Ignore allowed, 0 if not (DOS 3+)
  63.         bit 4 = 1 if Retry allowed, 0 if not (DOS 3+)
  64.         bit 3 = 1 if Fail allowed, 0 if not (DOS 3+)
  65.         bit 2 \ disk area of error    00 = DOS area  01 = FAT
  66.         bit 1 /            10 = root dir  11 = data area
  67.         bit 0 = 1 if write, 0 if read
  68.     AL = drive number if AH bit 7 clear
  69.     BP:SI -> device driver header (BP:[SI+4] bit 15 set if char device)
  70.     DI low byte contains error code if AH bit 7 set
  71.        00h write-protection violation attempted
  72.        01h unknown unit for driver
  73.        02h drive not ready
  74.        03h unknown command given to driver
  75.        04h data error (bad CRC)
  76.        05h bad device driver request structure length
  77.        06h seek error
  78.        07h unknown media type
  79.        08h sector not found
  80.        09h printer out of paper
  81.        0Ah write fault
  82.        0Bh read fault
  83.        0Ch general failure
  84.        0Dh (DOS 3+) sharing violation
  85.        0Eh (DOS 3+) lock violation
  86.        0Fh invalid disk change
  87.        10h (DOS 3+) FCB unavailable
  88.        11h (DOS 3+) sharing buffer overflow
  89.        12h (DOS 4+) code page mismatch
  90.        13h (DOS 4+) out of input
  91.        14h (DOS 4+) insufficient disk space
  92.     STACK:    DWORD    return address for INT 24 call
  93.         WORD    flags pushed by INT 24
  94.         WORD    original AX on entry to INT 21
  95.         WORD    BX
  96.         WORD    CX
  97.         WORD    DX
  98.         WORD    SI
  99.         WORD    DI
  100.         WORD    BP
  101.         WORD    DS
  102.         WORD    ES
  103.         DWORD    return address for INT 21 call
  104.         WORD    flags pushed by INT 21
  105. Handler must return:
  106.     AL = action code
  107.         00h ignore error and continue processing request
  108.         01h retry operation
  109.         02h terminate program through the equivalent of INT 21/AH=4Ch
  110.             (INT 20h for DOS 1.x)
  111.         03h fail system call in progress
  112.     SS,SP,DS,ES,BX,CX,DX preserved
  113. Notes:    the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h
  114.     if the handler returns to the application by popping the stack, DOS
  115.       will be in an unstable state until the first call with AH > 0Ch
  116.     for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  117.       critical errors
  118.     if IGNORE specified but not allowed, it is turned into FAIL
  119.     if RETRY specified but not allowed, it is turned into FAIL
  120.     if FAIL specified but not allowed, it is turned into ABORT
  121.     (DOS 3+) if a critical error occurs inside the critical error handler,
  122.       the DOS call is automatically failed
  123. --------D-25---------------------------------
  124. INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)
  125.     AL = drive number (00h = A:, 01h = B:, etc)
  126.     CX = number of sectors to read
  127.     DX = starting logical sector number (0000h - highest sector on drive) 
  128.     DS:BX -> buffer for data
  129. Return: CF clear if successful
  130.     CF set on error
  131.         AH = status
  132.          80h device failed to respond (timeout)
  133.          40h seek operation failed
  134.          20h controller failed
  135.          10h data error (bad CRC)
  136.          08h DMA failure
  137.          04h requested sector not found
  138.          03h write-protected disk (INT 26 only)
  139.          02h bad address mark
  140.          01h bad command
  141.         AL = error code (same as passed to INT 24 in DI)
  142.         AX = 0207h if more than 64K sectors on drive
  143.     may destroy all other registers except segment registers
  144. Notes:    original flags are left on stack, and must be popped by caller
  145.     this call bypasses the DOS filesystem
  146. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  147.       invalid drive number
  148.     DR-DOS 3.41 will return with a jump instead of RETF, leaving the
  149.       wrong number of bytes on the stack; use the huge-partition version
  150.       (INT 25/CX=FFFFh) for all partition sizes under DR-DOS 3.41
  151. SeeAlso: INT 13/AH=02h,INT 2F/CX=FFFFh,INT 26
  152. --------D-25----CXFFFF-----------------------
  153. INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition)
  154.     CX = FFFFh
  155.     AL = drive number (0=A, 1=B, etc)
  156.     DS:BX -> disk read packet (see below)
  157. Return: same as above
  158. Notes:    partition is potentially >32M (and requires this form of the call) if
  159.       bit 1 of device attribute word in device driver is set
  160.     original flags are left on stack, and must be removed by caller
  161.     this call bypasses the DOS filesystem
  162. SeeAlso: INT 13/AH=02h,INT 25,INT 26/CX=FFFFh
  163.  
  164. Format of disk read packet:
  165. Offset    Size    Description
  166.  00h    DWORD    sector number
  167.  04h    WORD    number of sectors to read
  168.  06h    DWORD    transfer address
  169. --------d-25CDCD-----------------------------
  170. INT 25 - Stacker - GET DEVICE DRIVER ADDRESS
  171.     AX = CDCDh
  172.     DS:BX -> buffer for address (see below)
  173.     CX = 0001h
  174.     DX = 0000h
  175. Return: AX = CDCDh if Stacker installed
  176.         DS:BX buffer filled
  177.  
  178. Format of driver address buffer:
  179. Offset    Size    Description
  180.  00h    WORD    signature CDCDh
  181.  02h    WORD    ??? 0001h
  182.  04h    DWORD    pointer to start of Stacker device driver
  183.  
  184. Format of device driver:
  185. Offset    Size    Description
  186.  00h    WORD    signature A55Ah
  187.  02h    WORD    Stacker version * 64h
  188.  04h    WORD    offset of volume-specific information offset table
  189.         (list of WORDs, one per drive, containing offsets to various
  190.         information)
  191.  06h 56 BYTEs    n/a
  192.  3Eh    BYTE    volume number, set after INT 21/AX=4404h
  193.         (use to index into volume-specific info offset table)
  194.  3Fh 19 BYTEs    n/a
  195.  52h  4 BYTEs    ASCII string "SWAP"
  196.  56h 26 BYTEs    drive mapping table (one byte for each drive A: through Z:)
  197.  
  198. Format of Stacker boot record:
  199. Offset    Size    Description
  200. 1F0h  8 BYTEs    Stacker signature (first byte is CDh)
  201. 1F8h    DWORD    pointer to start of Stacker device driver
  202. 1FCh    WORD    Stacker volume number
  203. 1FEh    WORD    ???
  204. --------c-25--FFSI4358-----------------------
  205. INT 25 - PC-CACHE.SYS - INSTALLATION CHECK
  206.     AL = FFh
  207.     SI = 4358h
  208. Return: SI = 6378h if installed
  209.         CX = segment of device driver PC-CACHE.SYS
  210.         DX = version (major in DH, minor in DL)
  211. Program: PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain
  212.       access to certain disk drivers for devices such as Bernoulli drives
  213. SeeAlso: INT 13/AH=A0h
  214. --------D-26---------------------------------
  215. INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
  216.     AL = drive number (00h = A:, 01h = B:, etc)
  217.     CX = number of sectors to write
  218.     DX = starting logical sector number (0000h - highest sector on drive) 
  219.     DS:BX -> data to write
  220. Return: CF clear if successful
  221.     CF set on error
  222.         AH = status
  223.          80h device failed to respond (timeout)
  224.          40h seek operation failed
  225.          20h controller failed
  226.          10h data error (bad CRC)
  227.          08h DMA failure
  228.          04h requested sector not found
  229.          03h write-protected disk (INT 26 only)
  230.          02h bad address mark
  231.          01h bad command
  232.         AL = error code (same as passed to INT 24 in DI)
  233.         AX = 0207h if more than 64K sectors on drive
  234.     may destroy all other registers except segment registers
  235. Notes:    original flags are left on stack, and must be popped by caller
  236.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  237.       disk buffers referencing sectors which are written with this call
  238. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  239.       invalid drive number
  240.     DR-DOS 3.41 will return with a jump instead of RETF, leaving the
  241.       wrong number of bytes on the stack; use the huge-partition version
  242.       (INT 26/CX=FFFFh) for all partition sizes under DR-DOS 3.41
  243. SeeAlso: INT 13/AH=03h,INT 25,INT 26/CX=FFFFh
  244. --------D-26----CXFFFF-----------------------
  245. INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition)
  246.     CX = FFFFh
  247.     AL = drive number (0=A, 1=B, etc)
  248.     DS:BX -> disk write packet (see below)
  249. Return: same as above
  250. Notes:    partition is potentially >32M (and requires this form of the call) if
  251.       bit 1 of device attribute word in device driver is set
  252.     original flags are left on stack, and must be removed by caller
  253.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  254.       disk buffers referencing sectors which are written with this call
  255. SeeAlso: INT 13/AH=03h,INT 25/CX=FFFFh,INT 26
  256.  
  257. Format of disk write packet:
  258. Offset    Size    Description
  259.  00h    DWORD    sector number
  260.  04h    WORD    number of sectors to read
  261.  06h    DWORD    transfer address
  262. --------G-26---------------------------------
  263. INT 26 - COMTROL HOSTESS i/ISA DEBUGGER - ENTER/EXIT EXTENDED ADDRESSING MODE
  264.     ???
  265. Return: ???
  266. SeeAlso: INT 23"COMTROL HOSTESS",INT 27"COMTROL HOSTESS"
  267. --------D-27---------------------------------
  268. INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
  269.     DX = number of bytes to keep resident (max FFF0h)
  270.     CS = segment of PSP
  271. Return: never
  272. Notes:    this is an obsolete call
  273.     INT 22, INT 23, and INT 24 are restored from the PSP
  274.     does not close any open files
  275.     the minimum number of bytes which will remain resident is 110h for
  276.       DOS 2.x and 60h for DOS 3+; there is no minimum for DOS 1.x, which
  277.       implements this service in COMMAND.COM rather than the DOS kernel
  278. SeeAlso: INT 21/AH=31h
  279. --------G-27---------------------------------
  280. INT 27 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE REMOTE TURBO DEBUGGER KERNEL
  281.     ???
  282. Return: ???
  283. Desc:    invoke a copy of the remote Turbo Debugger kernel on the Hostess i
  284.       controller
  285. SeeAlso: INT 20"COMTROL HOSTESS",INT 26"COMTROL HOSTESS"
  286. --------D-28---------------------------------
  287. INT 28 C - DOS 2+ - DOS IDLE INTERRUPT
  288.     SS:SP = top of MS-DOS stack for I/O functions
  289. Return: all registers preserved
  290. Desc:    This interrupt is invoked each time one of the DOS character input
  291.       functions loops while waiting for input.  Since a DOS call is in
  292.       progress even though DOS is actually idle during such input waits,
  293.       hooking this function is necessary to allow a TSR to perform DOS
  294.       calls while the foreground program is waiting for user input.  The
  295.       INT 28h handler may invoke any INT 21h function except functions
  296.       00h through 0Ch.
  297. Notes:    under DOS 2.x, the critical error flag (the byte immediately after the
  298.       InDOS flag) must be set in order to call DOS functions 50h/51h from
  299.       the INT 28h handler without destroying the DOS stacks.
  300.     calls to INT 21/AH=3Fh,40h from within an INT 28 handler may not use a
  301.       handle which refers to CON
  302.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  303.       set to 01h; if larger, DOS is truly busy and should not be reentered
  304.     the default handler is an IRET instruction
  305.     supported in OS/2 compatibility box
  306.     the _MS-DOS_Programmer's_Reference_ for DOS 5.0 incorrectly documents
  307.       this interrupt as superseded
  308. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h,INT 2F/AX=1680h
  309. --------D-29---------------------------------
  310. INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
  311.     AL = character to display
  312. Return: nothing
  313. Notes:    automatically called when writing to a device with bit 4 of its device
  314.       driver header set (see also INT 21/AH=52h)
  315.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  316.       vector and assume that ANSI.SYS is installed if the segment is larger
  317.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  318.     the default handler under DESQview 2.2 understands the <Esc>[2J
  319.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  320. SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79
  321. --------N-2A00-------------------------------
  322. INT 2A - NETWORK (Microsoft, LANtastic) - INSTALLATION CHECK
  323.     AH = 00h
  324. Return: AH <> 00h if installed
  325.     CF set if NetWare v2.15 NetBIOS emulator installed
  326. SeeAlso: INT 5C
  327. --------N-2A0000-----------------------------
  328. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  329.     AX = 0000h
  330. Return: AH = DDh
  331. SeeAlso: INT 5B
  332. --------N-2A01-------------------------------
  333. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  334.     AH = 01h
  335.     ES:BX -> NCB (see INT 5C)
  336. Return: AL = NetBIOS error code
  337.     AH = 00h if no error
  338.        = 01h on error
  339. SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  340. --------N-2A02-------------------------------
  341. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  342.     AH = 02h
  343.     ???
  344. Return: ???
  345. --------N-2A0300-----------------------------
  346. INT 2A - NETWORK (Microsoft,LANtastic) - CHECK DIRECT I/O
  347.     AX = 0300h
  348.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  349.         must include the colon)
  350. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  351.     CF set if access via files only
  352. Notes:    do not use direct disk accesses if this function returns CF set or the
  353.       device is redirected (INT 21/AX=5F02h)
  354.     may take some time to execute
  355.     called by DOS kernel on INT 25 and INT 26
  356. SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h
  357. --------N-2A04-------------------------------
  358. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NetBIOS REQUEST
  359.     AH = 04h
  360.     AL = error retry
  361.         00h automatically retry request on errors 09h, 12h, and 21h
  362.         01h no retry    
  363.         02h ???
  364.     ES:BX -> Network Control Block (see INT 5C"NetBIOS")
  365. Return: AX = 0000h if successful
  366.     AH = 01h on error
  367.         AL = error code
  368. Notes:    invokes either INT 5B or INT 5C as appropriate
  369.     NetWare 2.15 NetBIOS emulator returns CF clear if succesful, set on err
  370. SeeAlso: AH=01h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  371. --------N-2A0500-----------------------------
  372. INT 2A - NETWORK (Microsoft,LANtastic) - GET NETWORK RESOURCE AVAILABILITY
  373.     AX = 0500h
  374. Return: AX reserved
  375.     BX = number of network names available
  376.     CX = number of network control blocks available
  377.     DX = number of network sessions available
  378. SeeAlso: AH=01h,AH=04h,INT 5C"NetBIOS"
  379. --------N-2A06-------------------------------
  380. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  381.     AH = 06h
  382.     AL = 01h set concatenation mode (all printer output put in one job)
  383.          02h set truncation mode (default)
  384.          printer open/close starts new print job
  385.          03h flush printer output and start new print job
  386. Return: CF set on error
  387.         AX = error code
  388.     CF clear if successful
  389. Notes:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  390.     LANtastic v4.x no longer supports this call
  391. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  392. --------N-2A2001-----------------------------
  393. INT 2A - MS Networks or NETBIOS - ???
  394.     AX = 2001h
  395.     ???
  396. Return: ???
  397. Note:    intercepted by DESQview 2.x
  398. --------N-2A2002-----------------------------
  399. INT 2A - NETWORK - ???
  400.     AX = 2002h
  401.     ???
  402. Return: ???
  403. Note:    called by MS-DOS 3.30-6.00 APPEND
  404. --------N-2A2003-----------------------------
  405. INT 2A - NETWORK - ???
  406.     AX = 2003h
  407.     ???
  408. Return: ???
  409. Note:    called by MS-DOS 3.30-6.00 APPEND
  410. --------N-2A7802-----------------------------
  411. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  412.     AX = 7802h
  413.     ES:DI -> 8-byte buffer to be filled
  414. Return: AL = 00h if no user logged on to Extended Services
  415.     AL <> 00h if user logged on to Extended Services
  416.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  417. --------D-2A80-------------------------------
  418. INT 2A CU - NETWORK - BEGIN DOS CRITICAL SECTION
  419.     AH = 80h
  420.     AL = critical section number (00h-0Fh)
  421.         01h DOS kernel, SHARE.EXE, DOSMGR
  422.         apparently for maintaining the integrity of DOS/SHARE/NET
  423.           data structures
  424.         02h DOS kernel, DOSMGR
  425.         ensures that no multitasking occurs while DOS is calling an
  426.           installable device driver
  427.         05h REDIR, DOS 4.x only IFSFUNC
  428.         06h DOS 4.x only IFSFUNC
  429.         08h ASSIGN.COM
  430.         0Ah MSCDEX
  431. Notes:    normally hooked to avoid interrupting a critical section, rather than
  432.       called
  433.     the handler should ensure that none of the critical sections are
  434.       reentered, usually by suspending a task which attempts to reenter
  435.       an active critical section
  436.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  437.       is patched.  DOS 3.1+ contains a zero-terminated list of words
  438.       beginning at offset -11 from the Swappable Data Area
  439.       (see INT 21/AX=5D06h); each word contains the offset within the
  440.       DOS data segment of a byte which must be changed from C3h (RET)
  441.       to 50h (POP AX) under DOS 3.x or from 00h to a nonzero value under
  442.       DOS 4+ to enable use of critical sections.  For DOS 4+, all words in
  443.       this list point at the byte at offset 0D0Ch.
  444. SeeAlso: AH=81h,AH=82h,AX=8700h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  445. --------D-2A81-------------------------------
  446. INT 2A CU - NETWORK - END DOS CRITICAL SECTION
  447.     AH = 81h
  448.     AL = critical section number (00h-0Fh) (see AH=80h)
  449. Notes:    normally hooked rather than called
  450.     the handler should reawaken any tasks which were suspended due to an
  451.       attempt to enter the specified critical section
  452. SeeAlso: AH=80h,AH=82h,AX=8700h
  453. --------D-2A82-------------------------------
  454. INT 2A CU - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  455.     AH = 82h
  456. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  457.       greater than 0Ch except 59h, and on process termination
  458.     the handler should reawaken any tasks which were suspended due to an
  459.       attempt to enter one of the critical sections 0 through 7
  460. SeeAlso: AH=81h
  461. --------N-2A84-------------------------------
  462. INT 2A CU - NETWORK - KEYBOARD BUSY LOOP
  463.     AH = 84h
  464. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  465.       loop (i.e. INT 21/AH=07h or INT 21/AH=08h) to allow the network
  466.       software to process requests
  467. SeeAlso: INT 28
  468. --------P-2A8700-----------------------------
  469. INT 2A CU - PRINT - BEGIN BACKGROUND PRINTING
  470.     AX = 8700h
  471.     CF clear
  472. Return: CF clear if OK to print in background now
  473.     CF set if background printing not allowed at this time
  474. Desc:    used to inform interested programs that PRINT is about to start its
  475.       background processing, and allow those programs to postpone the
  476.       processing if necessary
  477. Notes:    when PRINT gains control and want to begin printing, it calls this
  478.       function.  If CF is clear on return, PRINT begins its background
  479.       processing, and calls AX=8701h when it is done.  If CF is set on
  480.       return, PRINT will relinquish control immediately, and will not
  481.       call AX=8701h
  482.     PCVENUS (an early network shell by IBM and CMU) hooks this call to
  483.       prevent background printing while its own code is active
  484. SeeAlso: AH=80h,AH=81h,AX=8701h
  485. --------P-2A8701-----------------------------
  486. INT 2A CU - PRINT - END BACKGROUND PRINTING
  487.     AX = 8701h
  488. Desc:    used to inform interested programs that PRINT has completed its
  489.       background processing
  490. Note:    called by PRINT after it has performed some background printing; not
  491.       called if AX=8700h returned with CF set.
  492. SeeAlso: AX=8700h
  493. --------N-2A89-------------------------------
  494. INT 2A U - Network - ???
  495.     AH = 89h
  496.     AL = ???  (ASSIGN uses 08h)
  497.     ???
  498. Return: ???
  499. --------I-2A90-------------------------------
  500. INT 2A U - IBM PC 3270 EMULATION PROGRAM - ???
  501.     AH = 90h
  502.     ???
  503. Return: ???
  504. Note:    the LANtastic redirector and SERVER.EXE use this function with AL=01h,
  505.       03h-07h,0Ch-11h
  506. --------N-2AC2-------------------------------
  507. INT 2A U - Network - ???
  508.     AH = C2h
  509.     AL = subfunction
  510.         07h ???
  511.         08h ???
  512.     BX = 0001h
  513.     ???
  514. Return: ???
  515. Note:    called by DOS 3.30-6.00 APPEND
  516. --------N-2AD850-----------------------------
  517. INT 2A - Novell NetWare Lite??? - ???
  518.     AX = D850h
  519.     ???
  520. Return: ???
  521. Note:    intercepted by DV/X 1.10 PEERSERV.DVR
  522. SeeAlso: AX=D851h
  523. --------N-2AD851-----------------------------
  524. INT 2A - Novell NetWare Lite??? - ???
  525.     AX = D851h
  526.     ???
  527. Return: ???
  528. Note:    intercepted by DV/X 1.10 PEERSERV.DVR
  529. SeeAlso: AX=D850h
  530. --------N-2AFF90-----------------------------
  531. INT 2A - PC/TCP PREDIR.EXE - ???
  532.     AX = FF90h
  533. Return: AX = ???
  534. Note:    PREDIR.EXE is the network printer redirector included as part of the
  535.       PC/TCP system by FTP Software, Inc.
  536. --------N-2AFF91-----------------------------
  537. INT 2A - PC/TCP PREDIR.EXE - ???
  538.     AX = FF91h
  539.     BX = ???
  540. Return: AX = status???
  541. --------N-2AFF92-----------------------------
  542. INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
  543.     AX = FF92h
  544. Return: AX = 0000h if installed
  545.        BX = redirected printer port (FFFFh if no printers redirected)
  546.        CX = version (CH = major, CL = minor)
  547. Note:    PREDIR.EXE is the network printer redirector included as part of the
  548.       PC/TCP system by FTP Software, Inc.
  549. --------N-2AFF93-----------------------------
  550. INT 2A - PC/TCP PREDIR.EXE - ???
  551.     AX = FF93h
  552. Return: AX = ???
  553. --------N-2AFF94-----------------------------
  554. INT 2A - PC/TCP PREDIR.EXE - ???
  555.     AX = FF94h
  556.     BX = ???
  557.     CX = ???
  558.     DX = ???
  559. Return: AX = ???
  560. Note:    PREDIR.EXE is the network printer redirector included as part of the
  561.       PC/TCP system by FTP Software, Inc.
  562. --------N-2AFF95-----------------------------
  563. INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
  564.     AX = FF95h
  565.     CX = what to get
  566.         0000h ??? (returned pointer to "C:\COMMAND.COM")
  567.         0001h spooling program
  568.         0002h ???
  569.         0003h spool file name
  570.         0004h swap file name
  571. Return: AX = status
  572.         0000h successful
  573.     BX:DX -> ASCIZ configuration string
  574. --------N-2AFF96-----------------------------
  575. INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
  576.     AX = FF96h
  577.     CX = what to set
  578.         0000h ???
  579.         0001h print-on-hotkey state
  580.         0002h print-on-exit state
  581.         0003h print job timeout in clock ticks
  582.         0004h print-on-EOF state
  583.     BX = new value (0000h disabled, 0001h enabled except for timeout)
  584. Return: AX = ???
  585. SeeAlso: AX=FF97h
  586. Note:    PREDIR.EXE is the network printer redirector included as part of the
  587.       PC/TCP system by FTP Software, Inc.
  588. --------N-2AFF97-----------------------------
  589. INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
  590.     AX = FF97h
  591.     CX = what to get
  592.         0000h ???
  593.         0001h print-on-hotkey state
  594.         0002h print-on-exit state
  595.         0003h print job timeout in clock ticks
  596.         0004h print-on-EOF state
  597. Return: AX = status
  598.         0000h successful
  599.     BX = old value (0000h disabled, 0001 enabled except for timeout)
  600. SeeAlso: AX=FF96h
  601. --------D-2B---------------------------------
  602. INT 2B - DOS 2+ - RESERVED
  603. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  604. --------D-2C---------------------------------
  605. INT 2C - DOS 2+ - RESERVED
  606. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  607. --------O-2C---------------------------------
  608. INT 2C - STARLITE architecture - KERNEL API
  609. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  610.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  611.       be released in 1991.    The interrupt number is subject to change
  612.       before the actual release.
  613. --------D-2D---------------------------------
  614. INT 2D - DOS 2+ - RESERVED
  615. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  616. --------t-2D---------------------------------
  617. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.5.1]
  618.     AH = multiplex number
  619.     AL = function
  620.         00h installation check
  621.         Return: AL = 00h if free
  622.             AL = FFh if multiplex number in use
  623.                 CX = binary version number (CH = major, CL = minor)
  624.                 DX:DI -> signature string (see below) identifying
  625.                     the program using the multiplex number
  626.         01h get entry point
  627.         Return: AL = 00h if all API calls via INT 2D
  628.             AL = FFh if entry point supported
  629.                 DX:BX -> entry point for bypassing interrupt chain
  630.         02h uninstall
  631.         DX:BX = return address for successful uninstall (may be
  632.             ignored by TSR)
  633.         Return: AL = status
  634.                 00h not implemented
  635.                 01h unsuccessful
  636.                 02h can not uninstall yet, will do so when able
  637.                 03h safe to remove, but no resident uninstaller
  638.                 (TSR still enabled)
  639.                 BX = segment of memory block with resident code
  640.                 04h safe to remove, but no resident uninstaller
  641.                 (TSR now disabled)
  642.                 BX = segment of memory block with resident code
  643.                 05h not safe to remove now, try again later
  644.                 FFh successful
  645.             return at DX:BX with AX destroyed if successful and
  646.               TSR honors specific return address
  647.         03h request pop-up
  648.         Return: AL = status
  649.                 00h not implemented or TSR is not a pop-up
  650.                 01h can not pop up at this time, try again later
  651.                 02h can not pop up yet, will do so when able
  652.                 03h already popped up
  653.                 04h unable to pop up, user intervention required
  654.                 BX = standard reason code
  655.                     0000h unknown failure 
  656.                     0001h interrupt chain passes through memory
  657.                       which must be swapped out to pop up
  658.                     0002h swap-in failed
  659.                 CX = application's reason code if nonzero
  660.                 FFh TSR popped up and was exited by user
  661.                 BX = return value
  662.                     0000h no return value
  663.                     0001h TSR unloaded
  664.                     0002h-00FFh reserved
  665.                     0100h-FFFFh application-dependent
  666.         04h determine chained interrupts
  667.         BL = interrupt number (except 2Dh)
  668.         Return: AL = status
  669.                 00h not implemented
  670.                 01h (obsolete) unable to determine
  671.                 02h (obsolete) interrupt hooked
  672.                 03h (obsolete) interrupt hooked, address returned
  673.                 DX:BX -> TSR's interrupt BL handler
  674.                 04h list of hooked interrupts returned
  675.                 DX:BX -> interrupt hook list (see below)
  676.                 FFh interrupt not hooked
  677.         Notes:    since INT 2D is known to be hooked, the resident code
  678.               need not test for BL=2Dh (to minimize its size), and
  679.               the return value is therefore undefined in that case.
  680.             BL is ignored if the TSR returns AL=04h; in that case,
  681.               the caller needs to scan the return list rather than
  682.               making additional calls to this function.  If the
  683.               return is not 00h or 04h, then the caller must cycle
  684.               through the remaining interrupt numbers it wishes to
  685.               check.
  686.             return values 01h thru 03h are disparaged and will be
  687.               removed from the next version of this specification;
  688.               they are included for compatibility with version 3.3,
  689.               though they were probably never used in any
  690.               implementation
  691.         05h get hotkeys
  692.         Return: AL = status
  693.                 00h not implemented
  694.                 FFh supported
  695.                 DX:BX -> hotkey list (see below)
  696.         06h-0Fh reserved for future enhancements
  697.         Return: AL = 00h (not implemented)
  698.         other  application-dependent
  699. Notes:    programs should not use fixed multiplex numbers; rather, a program
  700.       should scan all multiplex numbers from 00h to FFh, remembering the
  701.       first unused multiplex in case the program is not yet installed.
  702.       For multiplex numbers which are in use, the program should compare
  703.       the first 16 bytes of the signature string to determine whether it
  704.       is already installed on that multiplex number.  If not previously
  705.       installed, it should use the first free multiplex number.
  706.     functions other than 00h are not valid unless a program is installed
  707.       on the selected multiplex number
  708.     to be considered fully compliant with version 3.5 of the specification,
  709.       programs must implement at least functions 00h, 02h (no resident
  710.       uninstall code required), and 04h (return value 04h).     TSRs that
  711.       provide hotkeys with which the user can activate them must also
  712.       implement function 05h.  The absolute minimum fully-compliant
  713.       implementation has an overhead of 64 bytes (80 bytes with function
  714.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  715.       protocol header and hook list entry).
  716.     the signature string and description may be used by memory mappers
  717.       to display the installed programs
  718.     users of this proposal should adhere to the IBM interrupt sharing
  719.       protocol (see below), which will permit removal of TSRs in
  720.       arbitrary order and interrupt handler reordering.  All TSRs
  721.       following this proposal should be removable, though they need not
  722.       keep the code for removing themselves resident; it is acceptable
  723.       for a separate program to perform the removal.
  724.     A sample implementation including example TSRs and utility programs
  725.       may be found in a separate package distributed as AMISLnnn.ZIP
  726.       (AMISL090.ZIP as of this writing).
  727.     Please let me know if you choose to follow this proposal.  The
  728.       signature and a list of the private API calls you use would be
  729.       appreciated, as well.
  730. SeeAlso: INT 2F
  731. Index:    installation check;Alternate Multiplex Interrupt Specification
  732. Index:    installation check;AMIS|installation check;FASTMOUS
  733. Index:    installation check;SPELLER|installation check;Monitor
  734. Index:    installation check;NOLPT|installation check;NOTE
  735. Index:    installation check;RBkeyswp|installation check;SWITCHAR
  736. Index:    installation check;VGABLANK|installation check;EATMEM
  737. Index:    installation check;RECALL|installation check;XPTR2
  738. Index:    uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
  739. Index:    entry point;Alternate Multiplex Interrupt|entry point;AMIS
  740.  
  741. Format of signature string:
  742. Offset    Size    Description
  743.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  744.  08h  8 BYTEs    blank-padded product name
  745.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  746. Note:    it is not necessary to reserve a full 64 bytes for the description,
  747.       just enough to store the actual ASCIZ string
  748.  
  749. Format of interrupt hook list [array]:
  750. Offset    Size    Description
  751.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  752.  01h    WORD    offset within hook list's segment of the interrupt handler
  753.         this will point at the initial short jump of the interrupt
  754.         sharing protocol header (see below)
  755.  
  756. Format of hotkey list:
  757. Offset    Size    Description
  758.  00h    BYTE    type of hotkey checking
  759.         bit 0: checks before chaining INT 09
  760.         bit 1: checks after chaining INT 09
  761.         bit 2: checks before chaining INT 15/AH=4Fh
  762.         bit 3: checks after chaining INT 15/AH=4Fh
  763.         bit 4: checks on INT 16/AH=00h,01h,02h
  764.         bit 5: checks on INT 16/AH=10h,11h,12h
  765.         bit 6: checks on INT 16/AH=20h,21h,22h
  766.         bit 7: reserved (0)
  767.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  768.  02h 6N BYTEs    array of hotkey definitions
  769.         (one per hotkey, first should be primary hotkey)
  770.         Offset    Size    Description
  771.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  772.                 hotkey triggers on release if bit 7 set
  773.          01h    WORD    required shift states (see below)
  774.          03h    WORD    disallowed shift states (see below)
  775.          05h    BYTE    flags
  776.                 bit 0: hotkey chained before processing
  777.                 bit 1: hotkey chained after processing
  778.                 bit 2: others should pass through this hotkey
  779.                     so that it can be monitored
  780.                 bit 3: hotkey will not activate if other keys
  781.                     pressed/released before hotkey press is
  782.                     completed
  783.                 bit 4: this key is remapped into some other key
  784.                 bit 5-7: reserved (0)
  785. Notes:    except for bit 7, the shift states correspond exactly to the return
  786.       values from INT 16/AH=12h.  A set bit in the required states word
  787.       indicates that the corresponding shift state must be active when the
  788.       hotkey's scan code is received for the hotkey to be recognized; a
  789.       clear bit means that the corresponding state may be ignored.    A set
  790.       bit in the disallowed shift states word indicates that the
  791.       corresponding shift state must be inactive.
  792.     if bit 2 is set, either control key may be pressed for the hotkey; if
  793.       bits 8 and 10 are both set, then both control keys must be pressed.
  794.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  795.     for the disallowed-states word, if one of the "either" bits is set,
  796.       then both the corresponding left bit and right bit must be set
  797.     examples:
  798.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  799.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  800.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  801. Index:    hotkeys;AMIS
  802.  
  803. Bitfields for shift states:
  804.  bit 0    right shift pressed
  805.  bit 1    left shift pressed
  806.  bit 2    either control key pressed
  807.  bit 3    either Alt key pressed
  808.  bit 4    ScrollLock active
  809.  bit 5    NumLock active
  810.  bit 6    CapsLock active
  811.  bit 7    either shift key pressed
  812.  bit 8    left control key pressed
  813.  bit 9    left Alt key pressed
  814.  bit 10    right control key pressed
  815.  bit 11    right Alt key pressed
  816.  bit 12    ScrollLock pressed
  817.  bit 13    NumLock pressed
  818.  bit 14    CapsLock pressed
  819.  bit 15    SysRq key pressed
  820.  
  821. Format of interrupt sharing protocol interrupt handler entry point:
  822. Offset    Size    Description
  823.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  824.         following this data block (EBh 10h)
  825.  02h    DWORD    address of next handler in chain
  826.  06h    WORD    signature 424Bh
  827.  08h    BYTE    EOI flag
  828.         00h software interrupt or secondary hardware interrupt handler
  829.         80h primary hardware interrupt handler (will issue EOI)
  830.  09h  2 BYTEs    short jump to hardware reset routine
  831.         must point at a valid FAR procedure (may be just RETF)
  832.  0Bh  7 BYTEs    reserved (0)
  833.  
  834. Signatures known to be in use:
  835.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  836.  'CoveSoft' 'Burnout+'  shareware screen saver Burnout Plus
  837.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  838.  'GraySoft' 'GIPC    '  GraySoft's Inter-Process Communications driver
  839.  'heathh  ' 'Monitor '
  840.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  841.  'JWB     ' 'RAMLIGHT'  James Birdsall's on-screen RAMdisk activity indicator
  842.  'Nildram ' 'ST      '  Screen Thief graphics screen grabber
  843.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  844.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  845.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  846.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  847.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  848.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  849.  'Ralf B  ' 'VGABLANK'    example TSR -- VGA-only screen blanker
  850.  'Sally IS' 'Mdisk   '  removeable, resizeable RAMdisk
  851.  'Sally IS' 'Scr2Tex '  screen dumper with output in (La)Tex format
  852.  'Thaco   ' 'NEST    '  Eirik Pedersen's programmer's delimiter matcher
  853.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  854.             testing programs (v1.1+)
  855.         'RECALL  '    public domain commandline editor and history (v1.2+)
  856.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  857. --------N-2D--10-----------------------------
  858. INT 2D - RATSR 2.0+ - GET STATUS
  859.     AL = 10h
  860.     AH = AMIS multiplex number for RATSR
  861. Return: AL = status
  862.         01h listening (no connection)
  863.         02h receiving          \
  864.         03h sending            > station being monitored
  865.         04h initializing receive  /
  866.     AH = keyboard lock status (00h unlocked, 01h locked)
  867. Program: RATSR is a utility by James Berry provided with
  868.       RemoteAccess/Professional, a commercial bulletin board system, that
  869.       allows remote control of a station over a network
  870. SeeAlso: INT 2D"AMIS"
  871. ----------2D--10-----------------------------
  872. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  873.     AL = 10h
  874.     AH = AMIS multiplex number for dLite
  875. Return: CF clear if successful
  876.         ES:BX -> parameter block (see below)
  877.     CF set on error
  878. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  879.       expands compressed files when they are read
  880. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  881.  
  882. Format of parameter block:
  883. Offset    Size    Description
  884.  00h    BYTE    TSR flags
  885.          bit 0: deny FCB access
  886.         bit 1: dLite sleeping rather than activated
  887.         bit 2: always indicate original filesize when reading
  888.             directory entries, rather than only for specified
  889.             programs
  890.         bits 3-7 reserved
  891.  01h    WORD    maximum number of programs needing original filesize
  892.  03h    WORD    current number of programs needing original filesize
  893.  05h    WORD    maximum number of files that can be handled by dLite (should
  894.          be the same as FILES= in CONFIG.SYS)
  895.  07h    WORD    offset (in the same segment as the parameter block) of the
  896.          table of programs needing the original filesize (8 bytes each,
  897.         without path or extension, uppercase, and zero terminated if
  898.         shorter than 8 bytes)
  899. ----------2D--10-----------------------------
  900. INT 2D - Burnout Plus v3.00 - GET STATE/CONTROL INFORMATION
  901.     AL = 10h
  902.     AH = AMIS multiplex number for Burnout Plus
  903. Return: AL = 01h
  904.     BX = Burnout Plus status (see below)
  905.     CX = Record of features loaded (see below)
  906.     ES:DI -> Burnout Plus control structure (see below)
  907. Program: Burnout Plus is a DOS screen saver from Cove Software
  908.  
  909. Bitfields for status:
  910.  bit 0    screen is blanked
  911.  bit 1    MS Windows is active (Burnout Plus deactivated)
  912.  bits 2-15 reserved
  913.  
  914. Bitfields for features loaded/features enabled:
  915.  bit 0    mouse activity monitor
  916.  bit 1    passkey support
  917.  bit 2    password support
  918.  bit 3    continuous clear
  919.  bit 4    software blanking
  920.  bit 5    video activity monitor
  921.  bit 6    disk activity monitor
  922.  bit 7    activating keystroke suppression
  923.  
  924. Format of Burnout Plus control structure:
  925. Offset    Size    Description
  926.  00h    BYTE    size of structure in bytes
  927.  01h    WORD    Burnout Plus version
  928.  03h    WORD    screen blanking reset count in clock ticks
  929.  05h    WORD    current countdown value in clock ticks
  930.  07h    BYTE    type of timeout specification
  931.  08h    BYTE    instant-blank hotkey
  932.  09h    WORD    extended status information (see below)
  933.          the bits for password, passkey, and software blanking are
  934.           ignored and cannot be enabled or disabled externally
  935.  0Bh    WORD    features enabled (see above)
  936. Note:    all fields except the first two may be modified by external programs
  937.       to affect the operation of Burnout Plus
  938.  
  939. Bitfields for extended status information:
  940.  bit 0    Burnout Plus disabled
  941.  bit 1    force screen to blank on next clock tick
  942.  bit 2    restore screen if currently blanked
  943.  bits 3-15 reserved
  944. Note:    bits 1 and 2 are automatically cleared by Burnout Plus after blanking
  945.       or restoring the screen
  946. ----------2D--10-----------------------------
  947. INT 2D U - Screen Thief v1.00 - FREE HIGH MEMORY BUFFERS
  948.     AL = 10h
  949.     AH = AMIS multiplex number for Screen Thief
  950. Return: nothing
  951. Note:    releases any code and data stored in EMS, DOS UMBs, or XMS UMBs, but
  952.       does not release the low-memory stub; this may be used to effect a
  953.       partial uninstall if INT 2D/AL=02h fails
  954. SeeAlso: INT D8"Screen Thief"
  955. ----------2D--11-----------------------------
  956. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  957.     AL = 11h
  958.     AH = AMIS multiplex number for dLite
  959.     BX = file handle
  960. Return: CF clear if successful
  961.         DX:AX = size of uncompressed file
  962.     CF set on error (not dPressed file)
  963. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  964. ----------2D--12-----------------------------
  965. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  966.     AL = 12h
  967.     AH = AMIS multiplex number for dLite
  968.     BX = file handle
  969. Return:    CF clear if successful
  970.         DX:AX = size of compressed file
  971.     CF set on error (not dPressed file)
  972. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  973. --------l-2E---------------------------------
  974. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  975.     DS:SI -> commandline to execute (see below)
  976. Return: all registers except CS:IP destroyed
  977.     AX = status (4DOS v4.0)
  978.        0000h successful
  979.        FFFFh error before processing command (not enough memory, etc)
  980.        other error number returned by command
  981. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  982.       internal commands) without loading another copy of COMMAND.COM
  983.     if COMMAND.COM is the user's command interpreter, the primary copy
  984.       executes the command; this allows the master environment to be
  985.       modified by issuing a "SET" command, but changes in the master
  986.       environment will not become effective until all programs descended
  987.       from the primary COMMAND.COM terminate
  988.     since COMMAND.COM processes the string as if typed from the keyboard,
  989.       the transient portion needs to be present, and the calling program
  990.       must ensure that sufficient memory to load the transient portion can
  991.       be allocated by DOS if necessary
  992.     results are unpredictable if invoked by a program run from a batch file
  993.       because this call is not reentrant and COMMAND.COM uses the same
  994.       internal variables when processing a batch file
  995.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  996.       has been loaded
  997.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  998.  
  999. Format of commandline:
  1000. Offset    Size    Description
  1001.  00h    BYTE    length of command string, not counting trailing CR
  1002.  01h    var    command string
  1003.   N    BYTE    0Dh (CR)
  1004. ----------2E---------------------------------
  1005. INT 2E UP - Windows NT - NATIVE API
  1006.     EAX = function number
  1007.     EDX = address of parameter block
  1008. Return: ???
  1009. --------l-2E----BXE22E-----------------------
  1010. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  1011.     BX = E22Eh
  1012.     DS:SI -> zero byte
  1013. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  1014. ----------2F---------------------------------
  1015. INT 2F - Multiplex - NOTES
  1016.     AH = identifier of program which is to handle the interrupt
  1017.        00h-7Fh reserved for DOS
  1018.        B8h-BFh reserved for networks
  1019.        C0h-FFh reserved for applications
  1020.     AL is the function code
  1021.    This is a general mechanism for verifying the presence of a TSR and 
  1022.    communicating with it.  When searching for a free identifier code for AH
  1023.    using the installation check (AL=00h), the calling program should set
  1024.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  1025.    and SS:SP to be valid on return, since numerous programs now use additional
  1026.    registers on input and/or output for the installation check.
  1027. Notes:    Since the multiplex chain is growing so long, and beginning to
  1028.       experience multiplex number collisions, I am proposing an alternate
  1029.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  1030.       multiplex, please let me know.
  1031.     DOS and some other programs return values in the flags register, so
  1032.       any TSR which chains by calling the previous handler rather than
  1033.       jumping to it should ensure that the returned flags are preserved
  1034.       and passed back to the original caller
  1035. SeeAlso: INT 2D
  1036. --------t-2F---------------------------------
  1037. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  1038.     AH = xx (dynamically assigned based upon a search for a multiplex
  1039.          number which doesn't answer installed)
  1040.     AL = 00h installation check
  1041.     ES:DI = EBEBh:BEBEh
  1042. Return: AL = 00h not installed
  1043.          01h not installed, not OK to install
  1044.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  1045.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  1046.          short form of the manufacturer's name, PPPPPPPP is a product
  1047.          name and NNNN is the product's version number
  1048. --------t-2F---------------------------------
  1049. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  1050.     AH = programmer-selected multiplex number
  1051.     AL = function
  1052.         00h installation check
  1053.         Return: AL = FFh if installed
  1054.         01h get TSR interrupt vectors
  1055.         Return: DX:AX -> vector table (see below)
  1056.         02h get TSR code segment
  1057.         Return: AX = code segment for all interrupt handlers
  1058.         03h call user exit routine and release TSR's memory
  1059.         04h get signature string
  1060.         Return: DX:AX -> counted string containing signature
  1061.         05h get TSR's INT 2F handler
  1062.         Return: DX:AX -> INT 2F handler
  1063.         06h enable/disable TSR
  1064.         BL = new state (00h disabled, 01h enabled)
  1065.         07h activate TSR (popup if not disabled)
  1066.         08h get hotkeys
  1067.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  1068.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  1069.         09h set hotkey
  1070.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  1071.         CX = new hotkey (CH = keyflags, CL = scancode)
  1072.         0Ah-1Fh reserved
  1073. Index:    installation check;Ross Wentworth POPUP library
  1074.  
  1075. Format of vector table entry:
  1076. Offset    Size    Description
  1077.  00h    BYTE    vector number (00h = end of table)
  1078.  01h    DWORD    original vector
  1079.  05h    WORD    offset of interrupt handler in TSR's code segment
  1080. --------t-2F---------------------------------
  1081. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  1082.     AH = xx (dynamically assigned based upon a search for a multiplex
  1083.          number from C0h to FFh which doesn't answer installed)
  1084.     AL = 00h installation check
  1085.     ES:DI = 1492h:1992h
  1086. Return: AL = 00h not installed
  1087.          01h not installed, not OK to install
  1088.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  1089.          point to author_name_ver table (see below)
  1090.     AH = FFh
  1091. Note:    this interface permits advanced communication with TSRs: it is possible
  1092.       to make a generic uninstall utility, advanced TSR relocator programs
  1093.       in order to fit fragmented memory areas, etc.
  1094. See also: INT 2D"AMIS",INT 2F"Compuscience"
  1095. Index:    installation check;CiriSOFT TSR interface
  1096. Index:    uninstall;CiriSOFT TSR interface
  1097.  
  1098. Format of author_name_ver table:
  1099. Offset    Size    Description
  1100.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  1101.         with PSP, XMS upper memory segment if installed as UMB...)
  1102.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  1103.         in *.COM programs and 0 in upper memory TSR's).
  1104.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  1105.         used by TSR is possible to determine if hooked vectors are
  1106.         still pointing it (and if it is safe to uninstall).
  1107.  -10    BYTE    characteristics byte
  1108.         bits 0-2: 000 normal program (with PSP)
  1109.               001 upper XMS memory block (needed HIMEM.SYS function
  1110.                   to free memory when uninstalling)
  1111.               010 device driver (*.SYS)
  1112.               011 device driver in EXE format
  1113.               1xx others (reserved)
  1114.         bits 3-6 reserved
  1115.         bit 7 set if extra_table defined and supported
  1116.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  1117.         that the TSR must be use THIS variable in it's INT 2Fh handler.
  1118.  -8    WORD    offset to vector_area table (see below)
  1119.  -6    WORD    offset to extra_area table (see bit 7 in offset -10 and below)
  1120.  -4   4 BYTEs    signature string "*##*"
  1121.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  1122.         is used in order to determine if the TSR is already resident
  1123.         and it's version code; the ':' char is used as delimiter)
  1124.  
  1125. Format of vector_area table:
  1126. Offset    Size    Description
  1127.  -1    BYTE    number of vectors intercepted by TSR
  1128.  00h    BYTE    first vector number
  1129.  01h    DWORD    first vector pointer before installing the TSR
  1130.  05h    BYTE    second vector number
  1131.  06h    DWORD    second vector pointer before installing the TSR
  1132.  0Ah    ...    (and so on)
  1133. Note:    the TSR must use these variables to invoke the previous interrupt
  1134.       handler routines
  1135.  
  1136. Format of extra_area table (needed only to improve relocation feature):
  1137. Offset    Size    Description
  1138.  00h    WORD    offset to external_ctrl table (0 if not supported)
  1139.  02h    WORD    reserved for future use (0)
  1140.  
  1141. Format of external_ctrl table:
  1142. Offset    Size    Description
  1143.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  1144.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  1145.  ---And if bit 0 in offset 00h is off:
  1146.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  1147.          /SR parameter (silent installation & inhibit)
  1148.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  1149.         from the previous TSR still resident
  1150.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  1151. --------c-2F00-------------------------------
  1152. INT 2F U - DOS 2.x only PRINT.COM - ???
  1153.     AH = 00h
  1154.     ???
  1155. Return: ???
  1156. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  1157.     values in AH other than 00h or 01h cause PRINT to return the number of
  1158.       files in the queue in AH
  1159. SeeAlso: AH=01h
  1160. ----------2F00-------------------------------
  1161. INT 2F U - PSPRINT - PRINT JOB CONTROL
  1162.     AH = 00h
  1163.     ???
  1164. Return: ???
  1165. --------c-2F0080-----------------------------
  1166. INT 2F - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE
  1167.     AX = 0080h
  1168. Return: after PRINT executes
  1169. Note:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  1170. --------c-2F01-------------------------------
  1171. INT 2F U - DOS 2.x only PRINT.COM - ???
  1172.     AH = 01h
  1173.     ???
  1174. Return: ???
  1175. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  1176.     values in AH other than 00h or 01h cause PRINT to return the number of
  1177.       files in the queue in AH
  1178. SeeAlso: AH=00h
  1179. --------c-2F0100-----------------------------
  1180. INT 2F - DOS 3+ PRINT.COM - INSTALLATION CHECK
  1181.     AX = 0100h
  1182. Return: AL = status
  1183.         00h not installed
  1184.         01h not installed, but not OK to install
  1185.         FFh installed
  1186. SeeAlso: AX=0101h
  1187. --------c-2F0101-----------------------------
  1188. INT 2F - DOS 3+ PRINT.COM - SUBMIT FILE FOR PRINTING
  1189.     AX = 0101h
  1190.     DS:DX -> submit packet (see below)
  1191. Return: CF clear if successful
  1192.         AL = 01h added to queue
  1193.          9Eh now printing
  1194.     CF set on error
  1195.         AX = error code (see also INT 21/AH=59h)
  1196.         01h invalid function
  1197.         02h file not found
  1198.         03h path not found
  1199.         04h out of file handles
  1200.         05h access denied
  1201.         08h print queue full
  1202.         09h spooler busy
  1203.         0Ch name too long
  1204.         0Fh invalid drive
  1205. SeeAlso: AX=0102h
  1206.  
  1207. Format of submit packet:
  1208. Offset    Size    Description
  1209.  00h    BYTE    level (must be 00h)
  1210.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  1211. --------c-2F0102-----------------------------
  1212. INT 2F - DOS 3+ PRINT.COM - REMOVE FILE FROM PRINT QUEUE
  1213.     AX = 0102h
  1214.     DS:DX -> ASCIZ filename (wildcards allowed)
  1215. Return: CF clear if successful
  1216.     CF set on error
  1217.         AX = error code (see AX=0101h)
  1218. SeeAlso: AX=0101h,AX=0103h
  1219. --------c-2F0103-----------------------------
  1220. INT 2F - DOS 3+ PRINT.COM - CANCEL ALL FILES IN PRINT QUEUE
  1221.     AX = 0103h
  1222. Return: CF clear if successful
  1223.     CF set on error
  1224.         AX = error code (see AX=0101h)
  1225. SeeAlso: AX=0102h
  1226. --------c-2F0104-----------------------------
  1227. INT 2F - DOS 3+ PRINT.COM - FREEZE PRINT QUEUE TO READ JOB STATUS
  1228.     AX = 0104h
  1229. Return: CF clear if successful
  1230.         DX = error count
  1231.         DS:SI -> print queue
  1232.     CF set on error
  1233.         AX = error code (see AX=0101h)
  1234. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  1235.       to avoid changing the list while it is being examined
  1236. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  1237.       an empty filename; the first name is the file currently being printed
  1238.     printing is stopped until AX=0105h is called to prevent the queue
  1239.       from changing while the filenames are being read
  1240. SeeAlso: AX=0101h,AX=0105h
  1241. --------c-2F0105-----------------------------
  1242. INT 2F - DOS 3+ PRINT.COM - RESTART PRINT QUEUE AFTER STATUS READ
  1243.     AX = 0105h
  1244. Return: CF clear if successful
  1245.     CF set on error
  1246.         AX = error code (see AX=0101h)
  1247. Desc:    restart PRINT's activities once an application finishes examining the
  1248.       print queue
  1249. SeeAlso: AX=0104h
  1250. --------c-2F0106-----------------------------
  1251. INT 2F - DOS 3.3+ PRINT.COM - GET PRINTER DEVICE
  1252.     AX = 0106h
  1253. Return: CF set if files in print queue
  1254.         AX = error code 0008h (queue full)
  1255.         DS:SI -> device driver header
  1256.     CF clear if print queue empty
  1257.         AX = 0000h
  1258. Desc:    determine which device, if any, PRINT is currently using for output
  1259. Notes:    documented for DOS 5+, but not documented for prior versions
  1260.     this function can be used to allow a program to avoid printing to the
  1261.       printer on which PRINT is currently performing output
  1262. SeeAlso: AX=0104h
  1263. --------N-2F0200-----------------------------
  1264. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  1265.     AX = 0200h
  1266. Return: AL = FFh if installed
  1267. Desc:    determine whether the PC LAN Program redirector is installed
  1268. SeeAlso: AX=0201h,AX=0203h
  1269. --------N-2F0201-----------------------------
  1270. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1271.     AX = 0201h
  1272. Return: nothing???
  1273. Notes:    called by DOS 3.3+ PRINT.COM
  1274.     AX=0202h appears to be the opposite function
  1275.     these functions are supposedly used to signal opening and closing of
  1276.       printers
  1277. SeeAlso: AX=0202h
  1278. --------N-2F0202-----------------------------
  1279. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1280.     AX = 0202h
  1281.     ???
  1282. Return: nothing???
  1283. Notes:    called by DOS 3.3+ PRINT.COM
  1284.     these functions are supposedly used to signal opening and closing of
  1285.       printers
  1286. SeeAlso: AX=0201h
  1287. --------N-2F0203-----------------------------
  1288. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1289.     AX = 0203h
  1290. Return: nothing???
  1291. Notes:    called by DOS 3.3+ PRINT.COM
  1292.     AX=0204h appears to be the opposite function
  1293.     these functions are supposedly used to signal opening and closing of
  1294.       printers
  1295. SeeAlso: AX=0200h,AX=0204h
  1296. --------N-2F0204-----------------------------
  1297. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1298.     AX = 0204h
  1299.     ???
  1300. Return: nothing???
  1301. Notes:    called by DOS 3.3 PRINT.COM
  1302.     these functions are supposedly used to signal opening and closing of
  1303.       printers
  1304. SeeAlso: AX=0200h,AX=0203h
  1305. --------N-2F---------------------------------
  1306. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1307.     AX = 02xxh
  1308.     ???
  1309. Return: ???
  1310. --------l-2F0500-----------------------------
  1311. INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  1312.     AX = 0500h
  1313. Return: AL = 00h not installed, OK to install
  1314.          01h not installed, can't install
  1315.          FFh installed
  1316. Desc:    determine whether a critical error message override is installed
  1317. Note:    this set of functions allows a user program to partially or completely
  1318.       override the default critical error handler's message in COMMAND.COM
  1319. SeeAlso: AH=05h,INT 24
  1320. --------l-2F05-------------------------------
  1321. INT 2F CU - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  1322.     AH = 05h
  1323. ---DOS 3.x---
  1324.     AL = extended error code (not zero)
  1325. ---DOS 4+ ---
  1326.     AL = error type
  1327.         01h DOS extended error code
  1328.         02h parameter error
  1329.     BX = error code
  1330. Return: CF clear if successful
  1331.         ES:DI -> ASCIZ error message (read-only)
  1332.         AL = completion state
  1333.             00h message requires completion with device name, drive, etc.
  1334.         01h message is complete as returned
  1335.     CF set if error code can't be converted to string
  1336.         AX,DI,ES destroyed
  1337.     other flags corrupted
  1338. Notes:    called at start of COMMAND.COM's default critical error handler if 
  1339.       installed by a user program, allowing partial or complete overriding
  1340.       of the default error messages
  1341.     subfunction 02h is called by many DOS 4 external programs
  1342.     DR-DOS's COMMAND.COM appends additional info ("0 files copied") to the
  1343.       returned string
  1344. SeeAlso: AX=0500h,AX=122Eh,INT 24
  1345. --------U-2F0600-----------------------------
  1346. INT 2F - DOS 3+ ASSIGN - INSTALLATION CHECK
  1347.     AX = 0600h
  1348. Return: AL = status
  1349.         00h not installed
  1350.         01h not installed, but not OK to install
  1351.         FFh installed
  1352. Notes:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  1353.       (see INT 21/AH=52h)
  1354.     undocumented prior to the release of DOS 5.0
  1355. SeeAlso: AX=0601h,INT 21/AH=52h
  1356. --------U-2F0601-----------------------------
  1357. INT 2F U - DOS 3+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  1358.     AX = 0601h
  1359. Return: ES = segment of ASSIGN work area and assignment table
  1360. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  1361.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  1362. SeeAlso: AX=0600h
  1363. --------D-2F0800-----------------------------
  1364. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  1365.     AX = 0800h
  1366. Return:    AL = 00h not installed, OK to install
  1367.          01h not installed, not OK to install
  1368.          FFh installed
  1369. Desc:    determine whether the internal support code used by DRIVER.SYS is
  1370.       present
  1371. Note:    supported by DR-DOS 5.0
  1372. --------D-2F0801-----------------------------
  1373. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  1374.     AX = 0801h
  1375.     DS:DI -> drive data table (see AX=0803h)
  1376. Return: AX,BX,SI,ES destroyed
  1377. Notes:    moves down internal list of drive data tables, copying and modifying
  1378.       the drive description flags word for tables referencing same physical
  1379.       drive
  1380.     the data table is appended to the chain of tables
  1381.     supported by DR-DOS 5.0
  1382. SeeAlso: AX=0803h
  1383. --------D-2F0802-----------------------------
  1384. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  1385.     AX = 0802h
  1386.     ES:BX -> device driver request header (see below)
  1387. Return: request header updated as per requested operation
  1388. Notes:    supported by DR-DOS 5.0
  1389.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  1390.       DOS 4+ executes this function on AL=02h and AL=04h-F7h
  1391.     the command codes and structures described below apply to all drivers
  1392.       which support the appropriate commands; this call is just one of a
  1393.       number of ways in which a device driver request may be invoked
  1394. SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah
  1395.  
  1396. Values for command code:
  1397.  00h INIT
  1398.  01h MEDIA CHECK (block devices)
  1399.  02h BUILD BPB (block devices)
  1400.  03h IOCTL INPUT
  1401.  04h INPUT
  1402.  05h NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  1403.  06h INPUT STATUS (character devices)
  1404.  07h INPUT FLUSH (character devices)
  1405.  08h OUTPUT
  1406.  09h OUTPUT WITH VERIFY
  1407.  0Ah OUTPUT STATUS (character devices)
  1408.  0Bh OUTPUT FLUSH (character devices)
  1409.  0Ch IOCTL OUTPUT
  1410.  0Dh (DOS 3+) DEVICE OPEN
  1411.  0Eh (DOS 3+) DEVICE CLOSE
  1412.  0Fh (DOS 3+) REMOVABLE MEDIA (block devices)
  1413.  10h (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  1414.  11h (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  1415.  12h (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  1416.  13h (DOS 3.2+) GENERIC IOCTL
  1417.  14h unused
  1418.  15h (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  1419.  16h unused
  1420.  17h (DOS 3.2+) GET LOGICAL DEVICE
  1421.  18h (DOS 3.2+) SET LOGICAL DEVICE
  1422.  19h (DOS 5+) CHECK GENERIC IOCTL SUPPORT
  1423.  80h (CD-ROM) READ LONG
  1424.  81h (CD-ROM) reserved
  1425.  82h (CD-ROM) READ LONG PREFETCH
  1426.  83h (CD-ROM) SEEK
  1427.  84h (CD-ROM) PLAY AUDIO
  1428.  85h (CD-ROM) STOP AUDIO
  1429.  86h (CD-ROM) WRITE LONG
  1430.  87h (CD-ROM) WRITE LONG VERIFY
  1431.  88h (CD-ROM) RESUME AUDIO
  1432.  
  1433. Format of device driver request header:
  1434. Offset    Size    Description
  1435.  00h    BYTE    length of request header
  1436.  01h    BYTE    subunit within device driver
  1437.  02h    BYTE    command code (see above)
  1438.  03h    WORD    status (filled in by device driver)
  1439.         bit 15: error
  1440.         bits 14-11: reserved
  1441.         bit 10: ??? set by DOS kernel on entry to some driver calls
  1442.         bit 9: busy
  1443.         bit 8: done (may be clear on return under European MS-DOS 4.0)
  1444.         bits 7-0: error code if bit 15 set (see below)
  1445. ---DOS---
  1446.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  1447.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  1448.             device's request queue
  1449.         (other versions) reserved (unused in DOS 2.x and 3.x)
  1450. ---STARLITE architecture---
  1451.  05h    DWORD    pointer to next request header
  1452.  09h  4 BYTEs    reserved
  1453. ---command code 00h---
  1454.  0Dh    BYTE    (return) number of units
  1455.  0Eh    DWORD    (call) pointer to DOS device helper function (see below)
  1456.             (European MS-DOS 4.0 only)
  1457.         (call) pointer past end of memory available to driver (DOS 5+)
  1458.         (return) address of first free byte following driver
  1459.  12h    DWORD    (call) pointer to commandline arguments
  1460.         (return) pointer to BPB array (block drivers) or
  1461.                 0000h:0000h (character drivers)
  1462.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  1463.    ---European MS-DOS 4.0---
  1464.  17h    DWORD    pointer to function to save registers on stack
  1465.    ---DOS 5+ ---
  1466.  17h    WORD    (return) error-message flag
  1467.             0001h MS-DOS should display error msg on init failure
  1468. ---command code 01h---
  1469.  0Dh    BYTE    media descriptor
  1470.  0Eh    BYTE    returned status
  1471.         00h don't know
  1472.         01h media has not changed
  1473.         FFh media has been changed
  1474.  0Fh    DWORD    (return, DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM
  1475.           bit in device header is set and disk changed
  1476. ---command code 02h---
  1477.  0Dh    BYTE    media descriptor
  1478.  0Eh    DWORD    transfer address
  1479.         -> scratch sector if NON-IBM FORMAT bit in device header set
  1480.         -> first FAT sector otherwise
  1481.  12h    DWORD    pointer to BPB (set by driver) (see INT 21/AH=53h)
  1482. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  1483.  0Dh    BYTE    media descriptor (block devices only)
  1484.  0Eh    DWORD    transfer address
  1485.  12h    WORD    (call) number of bytes to read/write
  1486.         (return) actual number of bytes read or written
  1487. ---command codes 04h,08h,09h---
  1488.  0Dh    BYTE    media descriptor (block devices only)
  1489.  0Eh    DWORD    transfer address
  1490.  12h    WORD    byte count (character devices) or sector count (block devices)
  1491.  14h    WORD    starting sector number (block devices only)
  1492.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  1493.  1Ah    DWORD    (DOS 4+) 32-bit starting sector number (block devices with
  1494.         device attribute word bit 1 set only) if starting sector number
  1495.         above is FFFFh (see INT 21/AH=52h)
  1496. ---command code 05h---
  1497.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  1498. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  1499.  no further fields
  1500. ---command code 10h---
  1501.  0Dh    BYTE    unused
  1502.  0Eh    DWORD    transfer address
  1503.  12h    WORD    (call) number of bytes to write
  1504.         (return) actual number of bytes written
  1505. ---command codes 11h,12h---
  1506.  0Dh    BYTE    reserved
  1507. ---command code 15h---
  1508.  no further fields
  1509. ---command codes 13h,19h---
  1510.  0Dh    BYTE    category code
  1511.         00h unknown
  1512.         01h COMn:
  1513.         03h CON
  1514.         05h LPTn:
  1515.         07h mouse (European MS-DOS 4.0)
  1516.         08h disk
  1517.         9Eh (STARLITE) Media Access Control driver
  1518.  0Eh    BYTE    function code
  1519.         00h (STARLITE) MAC Bind request
  1520.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  1521.         SI contents (European MS-DOS 4.0)
  1522.  11h    WORD    offset of device driver header
  1523.         DI contents (European MS-DOS 4.0)
  1524.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  1525. ---command codes 80h,82h---
  1526.  0Dh    BYTE    addressing mode
  1527.         00h HSG (default)
  1528.         01h Phillips/Sony Red Book
  1529.  0Eh    DWORD    transfer address (ignored for command 82h)
  1530.  12h    WORD    number of sectors to read
  1531.         (if 0 for command 82h, request is an advisory seek)
  1532.  14h    DWORD    starting sector number
  1533.         logical sector number in HSG mode
  1534.         frame/second/minute/unused in Red Book mode
  1535.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  1536.  18h    BYTE    data read mode
  1537.         00h cooked (2048 bytes per frame)
  1538.         01h raw (2352 bytes per frame, including EDC/ECC)
  1539.  19h    BYTE    interleave size (number of sectors stored consecutively)
  1540.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  1541. ---command code 83h---
  1542.  0Dh    BYTE    addressing mode (see above)
  1543.  0Eh    DWORD    transfer address (ignored)
  1544.  12h    WORD    number of sectors to read (ignored)
  1545.  14h    DWORD    starting sector number (see also above)
  1546. ---command code 84h---
  1547.  0Dh    BYTE    addressing mode (see above)
  1548.  0Eh    DWORD    starting sector number (see also above)
  1549.  12h    DWORD    number of sectors to play
  1550. ---command codes 85h,88h---
  1551.  no further fields
  1552. ---command codes 86h,87h---
  1553.  0Dh    BYTE    addressing mode (see above)
  1554.  0Eh    DWORD    transfer address (ignored in write mode 0)
  1555.  12h    WORD    number of sectors to write
  1556.  14h    DWORD    starting sector number (see also above)
  1557.  18h    BYTE    write mode
  1558.         00h mode 0 (write all zeros)
  1559.         01h mode 1 (default) (2048 bytes per sector)
  1560.         02h mode 2 form 1 (2048 bytes per sector)
  1561.         03h mode 2 form 2 (2336 bytes per sector)
  1562.  19h    BYTE    interleave size (number of sectors stored consecutively)
  1563.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  1564.  
  1565. Values for error code:
  1566.     00h write-protect violation
  1567.     01h unknown unit
  1568.     02h drive not ready
  1569.     03h unknown command
  1570.     04h CRC error
  1571.     05h bad drive request structure length
  1572.     06h seek error
  1573.     07h unknown media
  1574.     08h sector not found
  1575.     09h printer out of paper
  1576.     0Ah write fault
  1577.     0Bh read fault
  1578.     0Ch general failure
  1579.     0Dh reserved
  1580.     0Eh (CD-ROM) media unavailable
  1581.     0Fh invalid disk change
  1582.  
  1583. Call European MS-DOS 4.0 device helper function with:
  1584.     DL = function
  1585.         00h "SchedClock" called on each timer tick
  1586.         AL = tick interval in milliseconds
  1587.         01h "DevDone" device I/O complete
  1588.         ES:BX -> request header
  1589.         Note:    must update status word first; may be called from
  1590.               an interrupt handler
  1591.         02h "PullRequest" pull next request from queue
  1592.         DS:SI -> DWORD pointer to start of device's request queue
  1593.         Return: ZF clear if pending request
  1594.                 ES:BX -> request header
  1595.             ZF set if no more requests
  1596.         03h "PullParticular" remove specific request from queue
  1597.         DS:SI -> DWORD pointer to start of device's request queue
  1598.         ES:BX -> request header
  1599.         Return: ZF set if request header not found
  1600.         04h "PushRequest" push the request onto the queue
  1601.         DS:SI -> DWORD pointer to start of device's request queue
  1602.         ES:BX -> request header
  1603.         interrupts disabled
  1604.         05h "ConsInputFilter" keyboard input check
  1605.         AX = character (high byte 00h if PC ASCII character)
  1606.         Return: ZF set if character should be discarded
  1607.             ZF clear if character should be handled normally
  1608.         Note:    called by keyboard interrupt handler so DOS can scan
  1609.               for special input characters
  1610.         06h "SortRequest" push request in sorted order by starting sector
  1611.         DS:SI -> DWORD pointer to start of device's request queue
  1612.         ES:BX -> request header
  1613.         interrupts disabled
  1614.         07h "SigEvent" send signal on keyboard event
  1615.         AH = event identifier
  1616.         Return: AL,FLAGS destroyed
  1617.         09h "ProcBlock" block on event
  1618.         AX:BX = event identifier (typically a pointer)
  1619.         CX = timeout in ms or 0000h for never
  1620.         DH = interruptible flag (nonzero if pause may be interrupted)
  1621.         interrupts disabled
  1622.         Return:    after corresponding ProcRun call
  1623.             CF clear if event wakeup, set if unusual wakeup
  1624.             ZF set if timeout wakeup, clear if interrupted
  1625.             AL = wakeup code, nonzero if unusual wakeup
  1626.             interrupts enabled
  1627.             BX,CX,DX destroyed
  1628.         Note:    block process and schedules another to run
  1629.         0Ah "ProcRun" unblock process
  1630.         AX:BX = event identifier (typically a pointer)
  1631.         Return:    AX = number of processes awakened
  1632.             ZF set if no processes awakened
  1633.             BX,CX,DX destroyed
  1634.         0Bh "QueueInit" initialize/clear character queue
  1635.         DS:BX -> character queue structure (see below)
  1636.         Note:    the queue size field must be set before calling
  1637.         0Dh "QueueWrite" put a character in the queue
  1638.         DS:BX -> character queue (see below)
  1639.         AL = character to append to end of queue
  1640.         Return: ZF set if queue is full
  1641.             ZF clear if character stored
  1642.         0Eh "QueueRead" get a character from the queue
  1643.         DS:BX -> character queue (see below)
  1644.         Return: ZF set if queue is empty
  1645.             ZF clear if characters in queue
  1646.                 AL = first character in queue
  1647.         10h "GetDOSVar" return pointer to DOS variable
  1648.         AL = index of variable
  1649.             03h current process ID
  1650.         BX = index into variable if AL specifies an array
  1651.         CX = expected length of variable
  1652.         Return: CF clear if successful
  1653.                 DX:AX -> variable
  1654.             CF set on error
  1655.                 AX,DX destroyed
  1656.             BX,CX destroyed
  1657.         Note:    the variables may not be modified
  1658.         14h "Yield" yield CPU if higher-priority task ready to run
  1659.         Return: FLAGS destroyed
  1660.         1Bh "CritEnter" begin system critical section
  1661.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  1662.         Return: AX,BX,CX,DX destroyed
  1663.         1Ch "CritLeave" end system critical section
  1664.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  1665.         Return: AX,BX,CX,DX destroyed
  1666.         Note:    must be called in the context of the process which
  1667.               called CritEnter on the semaphore
  1668. Note:    the DWORD pointing at the request queue must be allocated by the driver
  1669.       and initialized to 0000h:0000h.  It always points at the next request
  1670.       to be executed
  1671.  
  1672. Format of character queue:
  1673. Offset    Size    Description
  1674.  00h    WORD    size of queue in bytes
  1675.  02h    WORD    index of next character out
  1676.  04h    WORD    count of characters in the queue
  1677.  06h  N BYTEs    queue buffer
  1678. --------D-2F0803-----------------------------
  1679. INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  1680.     AX = 0803h
  1681. Return: DS:DI -> first drive data table in list
  1682. Note:    not available under DR-DOS 5.0
  1683. SeeAlso: AX=0801h
  1684.  
  1685. Format of DOS 3.30 drive data table:
  1686. Offset    Size    Description
  1687.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  1688.  04h    BYTE    physical unit number (for INT 13)
  1689.  05h    BYTE    logical drive number (0=A:)
  1690.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  1691.         Offset    Size    Description
  1692.          00h    WORD    bytes per sector
  1693.          02h    BYTE    sectors per cluster, FFh if unknown
  1694.          03h    WORD    number of reserved sectors
  1695.          05h    BYTE    number of FATs
  1696.          06h    WORD    number of root dir entries
  1697.          08h    WORD    total sectors
  1698.          0Ah    BYTE    media descriptor, 00h if unknown
  1699.          0Bh    WORD    sectors per FAT
  1700.          0Dh    WORD    sectors per track
  1701.          0Fh    WORD    number of heads
  1702.          11h    WORD    number of hidden sectors
  1703.  19h    BYTE    flags
  1704.         bit 6: 16-bit FAT instead of 12-bit FAT
  1705.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  1706.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  1707.         fixed media)
  1708.  27h    BYTE    terminating null for volume label???
  1709.  28h    BYTE    device type (see INT 21/AX=440Dh)
  1710.  29h    WORD    bit flags describing drive (see below)
  1711.  2Bh    WORD    number of cylinders
  1712.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  1713.  40h  3 BYTEs    ???
  1714.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  1715.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  1716.         media and PC-DOS 3.30)
  1717.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  1718. ---removable media---
  1719.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  1720. ---fixed media---
  1721.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  1722.  4Fh    WORD    absolute cylinder number of partition's start on physical
  1723.         drive (always FFFFh if primary partition)
  1724.  
  1725. Format of COMPAQ DOS 3.31 drive data table:
  1726. Offset    Size    Description
  1727.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  1728.  04h    BYTE    physical unit number (for INT 13)
  1729.  05h    BYTE    logical drive number (0=A:)
  1730.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.0-6.0 drive data table below)
  1731.  1Fh  6 BYTEs    reserved fields from BPB above???
  1732.  25h    BYTE    flags
  1733.         bit 6: 16-bit FAT instead of 12-bit FAT
  1734.         bit 5: large volume???
  1735.  26h    WORD    device-open count???
  1736.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  1737.         fixed media)
  1738.  33h    BYTE    terminating null for volume label
  1739.  34h    BYTE    device type (see INT 21/AX=440Dh)
  1740.  35h    WORD    bit flags describing drive (see below)
  1741.  37h    WORD    number of cylinders
  1742.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  1743.  52h  6 BYTEs    ??? apparently always zeros
  1744.  58h    BYTE    least-significant byte of last-accessed cylinder number
  1745. ---removable media---
  1746.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  1747. ---fixed media---
  1748.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  1749.  5Bh    WORD    absolute cylinder number of partition's start on physical
  1750.         drive (always FFFFh if primary partition)
  1751.  
  1752. Format of DOS 4.0-6.0 drive data table:
  1753. Offset    Size    Description
  1754.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  1755.  04h    BYTE    physical unit number (for INT 13)
  1756.  05h    BYTE    logical drive number (0=A:)
  1757.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  1758.         Offset    Size    Description
  1759.          00h    WORD    bytes per sector
  1760.          02h    BYTE    sectors per cluster, FFh if unknown
  1761.          03h    WORD    number of reserved sectors
  1762.          05h    BYTE    number of FATs
  1763.          06h    WORD    number of root dir entries
  1764.          08h    WORD    total sectors (see offset 15h if zero)
  1765.          0Ah    BYTE    media descriptor, 00h if unknown
  1766.          0Bh    WORD    sectors per FAT
  1767.          0Dh    WORD    sectors per track
  1768.          0Fh    WORD    number of heads
  1769.          11h    DWORD    number of hidden sectors
  1770.          15h    DWORD    total sectors if WORD at 08h is zero
  1771.  1Fh    BYTE    flags
  1772.         bit 6: 16-bit FAT instead of 12-bit
  1773.         bit 7: unsupportable disk (all accesses will return Not Ready)
  1774.  20h    WORD    device-open count
  1775.  22h    BYTE    device type (see INT 21/AX=440Dh)
  1776.  23h    WORD    bit flags describing drive (see below)
  1777.  25h    WORD    number of cylinders
  1778.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  1779.  40h  6 BYTEs    reserved (part of BPB above)
  1780.  46h    BYTE    last track accessed
  1781. ---removable media---
  1782.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  1783. ---fixed media---
  1784.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  1785.          always 0001h for DOS 5+
  1786.  49h    WORD    absolute cylinder number of partition's start on physical drive
  1787.         (FFFFh if primary partition in DOS 4.x)
  1788. ------
  1789.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  1790.         extended boot record rather than root directory)
  1791.  56h    BYTE    terminating null for volume label
  1792.  57h    DWORD    serial number
  1793.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  1794.  63h    BYTE    terminating null for filesystem type
  1795.  
  1796. Bitfields for flags describing drive:
  1797.  bit 0    fixed media
  1798.  bit 1    door lock ("changeline") supported
  1799.  bit 2    current BPB locked
  1800.  bit 3    all sectors in a track are the same size
  1801.  bit 4    physical drive has multiple logical units
  1802.  bit 5    current logical drive for physical drive
  1803.  bit 6    disk change detected
  1804.  bit 7    set DASD before formatting
  1805.  bit 8    disk reformatted
  1806.  bit 9    unformatted (fixed media only, disables reads and writes)
  1807. --------f-2F1000-----------------------------
  1808. INT 2F - SHARE - INSTALLATION CHECK
  1809.     AX = 1000h
  1810. Return: AL = 00h  not installed, OK to install
  1811.          01h  not installed, not OK to install
  1812.          FFh  installed
  1813. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  1814.       (08E9: OR  AL,AL
  1815.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  1816.     values of AL other than described here put PC-DOS 4.00 into the same
  1817.       loop (the buggy instructions are the same)
  1818. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  1819.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  1820.       inactive state (due to the undocumented /NC flag used by the autoload
  1821.       code) until this call is made
  1822.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  1823.     Windows Enhanced mode hooks this call and reports that SHARE is
  1824.       installed even when it is not
  1825. SeeAlso: AX=1080h,INT 21/AH=52h
  1826. --------d-2F1001-----------------------------
  1827. INT 2F U - SuperStor PRO SSTORDRV.SYS - SET ???
  1828.     AX = 1001h
  1829.     BX = ???
  1830.     DX = ???
  1831. Program: SuperStor is a disk-compression program by Addstor.
  1832. SeeAlso: AX=F800h
  1833. --------f-2F1040-----------------------------
  1834. INT 2F U - DOS 4 only SHARE internal - ???
  1835.     AX = 1040h
  1836.     ???
  1837. Return: AL = FFh???
  1838. SeeAlso: AX=1000h
  1839. --------f-2F1080-----------------------------
  1840. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  1841.     AX = 1080h
  1842. Return: AL = status
  1843.         F0h successful
  1844.         FFh checking was already on
  1845. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  1846.       and file sharing checks.  The undocumented commandline flag /NC can
  1847.       be used to disable the sharing code.
  1848. SeeAlso: AX=1000h,AX=1081h
  1849. --------f-2F1081-----------------------------
  1850. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  1851.     AX = 1081h
  1852. Return: AL = status
  1853.         F0h successful
  1854.         FFh checking was already off
  1855. Note:    (see AX=1080h)
  1856. SeeAlso: AX=1000h,AX=1080h
  1857. --------O-2F10FF-----------------------------
  1858. INT 2F U - Multiplex - DR-DOS 5.0 - ???
  1859.     AX = 10FFh
  1860.     ES:BX -> ???
  1861. Note:    sets pointer in kernel
  1862. --------N-2F1100-----------------------------
  1863. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  1864.     AX = 1100h
  1865. Return: AL = 00h  not installed, OK to install
  1866.          01h  not installed, not OK to install
  1867.          FFh  installed
  1868. Notes:    called by DOS 3.1+ kernel
  1869.     In DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  1870.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  1871.       redirector
  1872. --------d-2F1100-----------------------------
  1873. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  1874.     AX = 1100h
  1875.     STACK: WORD DADAh
  1876. Return: AL = 00h not installed, OK to install
  1877.         STACK unchanged
  1878.        = 01h not installed, not OK to install
  1879.         STACK unchanged
  1880.        = FFh installed
  1881.         STACK: WORD ADADh
  1882. --------N-2F1101-----------------------------
  1883. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  1884.     AX = 1101h
  1885.     SS = DOS DS
  1886.     SDA first filename pointer -> fully-qualified directory name
  1887.     SDA CDS pointer -> current directory structure for drive with dir
  1888. Return: CF set on error
  1889.         AX = DOS error code (see INT 21/AH=59h)
  1890.     CF clear if successful
  1891. Note:    called by DOS 3.1+ kernel
  1892. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  1893. --------N-2F1102-----------------------------
  1894. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  1895.     AX = 1102h
  1896.     SS = DOS DS
  1897.     SDA first filename pointer -> fully-qualified directory name
  1898.     SDA CDS pointer -> current directory structure for drive with dir
  1899. Return: CF set on error
  1900.         AX = DOS error code (see INT 21/AH=59h)
  1901.     CF clear if successful
  1902. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  1903.       this function "SEQ_RMDIR"
  1904. SeeAlso: AX=1101h
  1905. --------N-2F1103-----------------------------
  1906. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  1907.     AX = 1103h
  1908.     SS = DOS DS
  1909.     SDA first filename pointer -> fully-qualified directory name
  1910.     SDA CDS pointer -> current directory structure for drive with dir
  1911. Return: CF set on error
  1912.         AX = DOS error code (see INT 21/AH=59h)
  1913.     CF clear if successful
  1914. Note:    called by DOS 3.1+ kernel
  1915. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  1916. --------N-2F1104-----------------------------
  1917. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  1918.     AX = 1104h
  1919.     SS = DOS DS
  1920.     SDA first filename pointer -> fully-qualified directory name
  1921.     SDA CDS pointer -> current directory structure for drive with dir
  1922. Return: CF set on error
  1923.         AX = DOS error code (see INT 21/AH=59h)
  1924.     CF clear if successful
  1925. Note:    appears to be identical to AX=1103h
  1926. SeeAlso: AX=1103h
  1927. --------N-2F1105-----------------------------
  1928. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  1929.     AX = 1105h
  1930.     SS = DOS DS
  1931.     SDA first filename pointer -> fully-qualified directory name
  1932.     SDA CDS pointer -> current directory structure for drive with dir
  1933. Return: CF set on error
  1934.         AX = DOS error code (see INT 21/AH=59h)
  1935.     CF clear if successful
  1936.         CDS updated with new path
  1937. Notes:    called by DOS 3.1+ kernel
  1938.     directory string in CDS should not have a terminating backslash unless
  1939.       the current directory is the root
  1940. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  1941. --------N-2F1106-----------------------------
  1942. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  1943.     AX = 1106h
  1944.     ES:DI -> SFT
  1945.         SFT DPB field -> DPB of drive containing file
  1946. Return: CF set on error
  1947.         AX = DOS error code (see INT 21/AH=59h)
  1948.     CF clear if successful
  1949.         SFT updated (redirector must decrement open count, which may be
  1950.             done with INT 2F/AX=1208h)
  1951. Note:    called by DOS 3.1+ kernel
  1952. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  1953. --------N-2F1107-----------------------------
  1954. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  1955.     AX = 1107h
  1956.     ES:DI -> SFT
  1957.         SFT DPB field -> DPB of drive containing file
  1958. Return: CF set on error
  1959.         AX = DOS error code (see INT 21/AH=59h)
  1960.     CF clear if successful
  1961.         all buffers for file flushed
  1962.         directory entry updated
  1963. Note:    called by DOS 3.1+ kernel
  1964. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  1965. --------N-2F1108-----------------------------
  1966. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  1967.     AX = 1108h
  1968.     ES:DI -> SFT
  1969.         SFT DPB field -> DPB of drive containing file
  1970.     CX = number of bytes
  1971.     SS = DOS DS
  1972.     SDA DTA field -> user buffer
  1973. Return: CF set on error
  1974.         AX = DOS error code (see INT 21/AH=59h)
  1975.     CF clear if successful
  1976.         CX = number of bytes read (0000h = end of file)
  1977.         SFT updated
  1978. Note:    called by DOS 3.1+ kernel
  1979. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  1980. --------N-2F1109-----------------------------
  1981. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  1982.     AX = 1109h
  1983.     ES:DI -> SFT
  1984.         SFT DPB field -> DPB of drive containing file
  1985.     CX = number of bytes
  1986.     SS = DOS DS
  1987.     SDA DTA field -> user buffer
  1988. Return: CF set on error
  1989.         AX = DOS error code (see INT 21/AH=59h)
  1990.     CF clear if successful
  1991.         CX = number of bytes written
  1992.         SFT updated
  1993. Note:    called by DOS 3.1+ kernel
  1994. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  1995. --------N-2F110A-----------------------------
  1996. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  1997.     AX = 110Ah
  1998.     BX = file handle
  1999.     CX:DX = starting offset
  2000.     SI = high word of size
  2001.     STACK: WORD low word of size
  2002.     ES:DI -> SFT
  2003.         SFT DPB field -> DPB of drive containing file
  2004.     SS = DOS DS
  2005. Return: CF set on error
  2006.        AL = DOS error code (see INT 21/AH=59h)
  2007.     STACK unchanged
  2008. Notes:    called by DOS 3.10-3.31 kernel
  2009.     the redirector is expected to resolve lock conflicts
  2010. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  2011. --------N-2F110A-----------------------------
  2012. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE
  2013.     AX = 110Ah
  2014.     BL = function
  2015.         00h lock
  2016.         01h unlock
  2017.     DS:DX -> parameter block (see below)
  2018.     ES:DI -> SFT
  2019.         SFT DPB field -> DPB of drive containing file
  2020.     SS = DOS DS
  2021. Return: CF set on error
  2022.        AL = DOS error code (see INT 21/AH=59h)
  2023. Notes:    called by DOS 4.0+ kernel
  2024.     the redirector is expected to resolve lock conflicts
  2025. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  2026.  
  2027. Format of parameter block:
  2028. Offset    Size    Description
  2029.  00h    DWORD    start offset
  2030.  04h    DWORD    size of region
  2031. --------N-2F110B-----------------------------
  2032. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  2033.     AX = 110Bh
  2034.     BX = file handle
  2035.     CX:DX = starting offset
  2036.     SI = high word of size
  2037.     STACK: WORD low word of size
  2038.     ES:DI -> SFT for file
  2039.         SFT DPB field -> DPB of drive containing file
  2040. Return: CF set on error
  2041.        AL = DOS error code (see INT 21/AH=59h)
  2042.     STACK unchanged
  2043. Note:    called by DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  2044. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  2045. --------N-2F110C-----------------------------
  2046. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  2047.     AX = 110Ch
  2048.     ES:DI -> current directory structure for desired drive
  2049. Return: AL = sectors per cluster
  2050.     AH = media ID byte
  2051.     BX = total clusters
  2052.     CX = bytes per sector
  2053.     DX = number of available clusters
  2054. Note:    called by DOS 3.1+ kernel
  2055. SeeAlso: INT 21/AH=36h
  2056. --------N-2F110D-----------------------------
  2057. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  2058.     AX = 110Dh
  2059.     SDA first filename pointer -> name of file
  2060.     ???
  2061. Return: ???
  2062. Note:    similar to AX=110Eh
  2063. SeeAlso: AX=110Eh
  2064. --------N-2F110E-----------------------------
  2065. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  2066.     AX = 110Eh
  2067.     SS = DOS DS
  2068.     SDA first filename pointer -> fully-qualified name of file
  2069.     SDA CDS pointer -> current directory structure for drive with file
  2070.     STACK: WORD new file attributes
  2071. Return: CF set on error
  2072.         AX = DOS error code (see INT 21/AH=59h)
  2073.     CF clear if successful
  2074.     STACK unchanged
  2075. Note:    called by DOS 3.1+ kernel
  2076. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  2077. --------N-2F110F-----------------------------
  2078. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  2079.     AX = 110Fh
  2080.     SS = DOS DS
  2081.     SDA first filename pointer -> fully-qualified name of file
  2082.     SDA CDS pointer -> current directory structure for drive with file
  2083. Return: CF set on error
  2084.         AX = DOS error code (see INT 21/AH=59h)
  2085.     CF clear if successful
  2086.         AX = file attributes
  2087.         BX:DI = file size
  2088. Note:    called by DOS 3.1+ kernel
  2089. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  2090. --------N-2F1110-----------------------------
  2091. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  2092.     AX = 1110h
  2093.     SDA first filename pointer -> name of file
  2094.     ???
  2095. Return: ???
  2096. Note:    appears to be similar to AX=110Fh
  2097. SeeAlso: AX=110Eh
  2098. --------N-2F1111-----------------------------
  2099. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  2100.     AX = 1111h
  2101.     SS = DS = DOS DS
  2102.     SDA first filename pointer = offset of fully-qualified old name
  2103.     SDA second filename pointer = offset of fully-qualified new name
  2104.     SDA CDS pointer -> current directory structure for drive with file
  2105. Return: CF set on error
  2106.         AX = DOS error code (see INT 21/AH=59h)
  2107.     CF clear if successful
  2108. Note:    called by DOS 3.1+ kernel
  2109. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  2110. --------N-2F1112-----------------------------
  2111. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  2112.     AX = 1112h
  2113.     SS = DS = DOS DS
  2114.     SDA first filename pointer -> name of file
  2115.     ???
  2116. Return: ???
  2117. Note:    similar to AX=1111h
  2118. SeeAlso: AX=1111h
  2119. --------N-2F1113-----------------------------
  2120. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  2121.     AX = 1113h
  2122.     SS = DS = DOS DS
  2123.     SDA first filename pointer -> fully-qualified filename in DOS DS
  2124.     SDA CDS pointer -> current directory structure for drive with file
  2125. Return: CF set on error
  2126.         AX = DOS error code (see INT 21/AH=59h)
  2127.     CF clear if successful
  2128. Notes:    called by DOS 3.1+ kernel
  2129.     the filespec may contain wildcards
  2130. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  2131. --------N-2F1114-----------------------------
  2132. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  2133.     AX = 1114h
  2134.     SDA first filename pointer -> name of file
  2135.     ???
  2136. Return: ???
  2137. Note:    similar to AX=1113h      
  2138. SeeAlso: AX=1113h
  2139. --------N-2F1115-----------------------------
  2140. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  2141.     AX = 1115h
  2142.     SS = DOS DS
  2143.     ES:DI -> SFT ???
  2144.     ???
  2145. Return: ???
  2146. Note:    similar to AX=1116h
  2147. SeeAlso: AX=1116h,AX=112Eh
  2148. --------N-2F1116-----------------------------
  2149. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  2150.     AX = 1116h
  2151.     ES:DI -> uninitialized SFT
  2152.     SS = DOS DS
  2153.     SDA first filename pointer -> fully-qualified name of file to open
  2154.     STACK: WORD file access and sharing modes (see INT 21/AH=3Dh)
  2155. Return: CF set on error
  2156.         AX = DOS error code (see INT 21/AH=59h)
  2157.     CF clear if successful
  2158.         SFT filled (except handle count, which DOS manages itself)
  2159.     STACK unchanged
  2160. Note:    called by DOS 3.1+ kernel
  2161. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  2162. SeeAlso: INT 21/AH=60h
  2163. --------N-2F1117-----------------------------
  2164. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  2165.     AX = 1117h
  2166.     ES:DI -> uninitialized SFT
  2167.     SS = DOS DS
  2168.     SDA first filename pointer -> fully-qualified name of file to open
  2169.     SDA CDS pointer -> current directory structure for drive with file
  2170.     STACK: WORD file creation mode
  2171.             low byte = file attributes (see INT 21/AH=3Ch)
  2172.             high byte = 00h normal create, 01h create new file
  2173. Return: CF set on error
  2174.         AX = DOS error code (see INT 21/AH=59h)
  2175.     CF clear if successful
  2176.         SFT filled (except handle count, which DOS manages itself)
  2177.     STACK unchanged
  2178. Note:    called by DOS 3.1+ kernel
  2179. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  2180. --------N-2F1118-----------------------------
  2181. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  2182.     AX = 1118h
  2183.     ES:DI -> uninitialized SFT
  2184.     SS = DOS DS
  2185.     SDA first filename pointer -> fully-qualified name of file
  2186.     STACK: WORD file creation mode
  2187.             low byte = file attributes
  2188.             high byte = 00h normal create, 01h create new file
  2189. Return: ???
  2190.     STACK unchanged
  2191. Note:    called by DOS 3.1+ kernel when creating a file on a drive for which the
  2192.       SDA CDS pointer has offset FFFFh
  2193. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  2194. --------N-2F1119-----------------------------
  2195. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  2196.     AX = 1119h
  2197.     SS = DS = DOS DS
  2198.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  2199.     SDA first filename pointer -> fully-qualified search template
  2200.     SDA search attribute = attribute mask for search
  2201. Return: CF set on error
  2202.         AX = DOS error code (see INT 21/AH=59h)
  2203.     CF clear if successful
  2204.         [DTA] = updated findfirst search data
  2205.             (bit 7 of first byte must be set)
  2206.         [DTA+15h] = standard directory entry for file
  2207. Notes:    called by DOS 3.1+ kernel
  2208.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  2209. SeeAlso: AX=111Ah,AX=111Bh
  2210. --------N-2F111A-----------------------------
  2211. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  2212.     AX = 111Ah
  2213.     ???
  2214. Return: CF set
  2215.         AX = error code (03h for DOS 4.01 IFSFUNC)
  2216. Note:    use AX=111Ch for DOS 5+
  2217. SeeAlso: AX=1119h,AX=111Ch
  2218. --------N-2F111B-----------------------------
  2219. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  2220.     AX = 111Bh
  2221.     SS = DS = DOS DS
  2222.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  2223.     SDA first filename pointer -> fully-qualified search template
  2224.     SDA CDS pointer -> current directory structure for drive with file
  2225.     SDA search attribute = attribute mask for search
  2226. Return: CF set on error
  2227.         AX = DOS error code (see INT 21/AH=59h)
  2228.     CF clear if successful
  2229.         [DTA] = updated findfirst search data
  2230.             (bit 7 of first byte must be set)
  2231.         [DTA+15h] = standard directory entry for file
  2232. Note:    called by DOS 3.1+ kernel
  2233. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  2234. --------N-2F111C-----------------------------
  2235. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  2236.     AX = 111Ch
  2237.     SS = DS = DOS DS
  2238.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  2239. Return: CF set on error
  2240.         AX = DOS error code (see INT 21/AH=59h)
  2241.     CF clear if successful
  2242.         [DTA] = updated findfirst search data
  2243.             (bit 7 of first byte must be set)
  2244.         [DTA+15h] = standard directory entry for file
  2245. Note:    called by DOS 3.1+ kernel
  2246. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=4Fh
  2247. --------N-2F111D-----------------------------
  2248. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  2249.     AX = 111Dh
  2250.     DS???
  2251.     SS = DOS DS
  2252. Return: ???
  2253. Notes:    used when a process is aborted
  2254.     called by DOS 3.1+ kernel
  2255.     closes all FCBs opened by process
  2256. SeeAlso: INT 21/AX=5D04h
  2257. --------N-2F111E-----------------------------
  2258. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  2259.     AX = 111Eh
  2260.     SS = DOS DS
  2261.     STACK: WORD function to execute
  2262.         5F00h  get redirection mode
  2263.             BL = type (03h printer, 04h disk)
  2264.             Return: BH = state (00h off, 01h on)
  2265.         5F01h  set redirection mode
  2266.             BL = type (03h printer, 04h disk)
  2267.             BH = state (00h off, 01h on)
  2268.         5F02h  get redirection list entry
  2269.             BX = redirection list index
  2270.             DS:SI -> 16-byte local device name buffer
  2271.             ES:DI -> 128-byte network name buffer
  2272.             Return: must set user's BX to device type and CX to
  2273.                 stored parameter value, using AX=1218h to get
  2274.                 stack frame address
  2275.         5F03h  redirect device
  2276.             BL = device type (see INT 21/AX=5F03h)
  2277.             CX = stored parameter value
  2278.             DS:SI -> ASCIZ source device name
  2279.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  2280.         5F04h  cancel redirection
  2281.             DS:SI -> ASCIZ device name or network path
  2282.         5F05h  get redirection list extended entry
  2283.             BX = redirection list index
  2284.             DS:SI -> buffer for ASCIZ source device name
  2285.             ES:DI -> buffer for destination ASCIZ network path
  2286.             Return: BH = status flag
  2287.                 BL = type (03h printer, 04h disk)
  2288.                 CX = stored parameter value
  2289.                 BP = NETBIOS local session number
  2290.         5F06h  similar to 5F05h???
  2291. Return: CF set on error
  2292.         AX = error code (see INT 21/AH=59h)
  2293.     STACK unchanged
  2294. Note:    called by DOS 3.1+ kernel on INT 21/AH=5Fh (including LAN Manager
  2295.       calls)
  2296. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  2297. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  2298. --------N-2F111F-----------------------------
  2299. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  2300.     AX = 111Fh
  2301.     STACK: WORD function
  2302.         5E02h  set printer setup
  2303.         5E03h  get printer setup
  2304.         5E04h  set printer mode
  2305.         5E05h  get printer mode
  2306. Return: CF set on error
  2307.         AX = error code (see INT 21/AH=59h)
  2308.     STACK unchanged
  2309. Note:    called by DOS 3.1+ kernel
  2310. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  2311. --------N-2F1120-----------------------------
  2312. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  2313.     AX = 1120h
  2314.     DS = DOS DS
  2315.     ???
  2316. Return: CF clear (successful)
  2317. Notes:    called by DOS 3.1+ kernel
  2318.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  2319. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  2320. --------N-2F1121-----------------------------
  2321. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  2322.     AX = 1121h
  2323.     CX:DX = offset (in bytes) from end
  2324.     ES:DI -> SFT
  2325.         SFT DPB field -> DPB of drive with file
  2326.     SS = DOS DS
  2327. Return: CF set on error
  2328.         AL = DOS error code (see INT 21/AH=59h)
  2329.     CF clear if successful
  2330.         DX:AX = new file position
  2331. Note:    called by DOS 3.1+ kernel
  2332. SeeAlso: AX=1228h,INT 21/AH=42h
  2333. --------N-2F1122-----------------------------
  2334. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  2335.     AX = 1122h
  2336.     SS = DOS DS
  2337.     ???
  2338. Return: ???
  2339. Note:    called by DOS 3.1+ kernel
  2340. --------N-2F1123-----------------------------
  2341. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  2342.     AX = 1123h
  2343.     DS:SI -> ASCIZ filename to canonicalize
  2344.     ES:DI -> 128-byte buffer for qualified name
  2345. Return: CF set if not resolved
  2346. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR-DOS 5.0 unless the
  2347.       filename matches the name of a character device
  2348.     called first when DOS attempts to resolve a filename (unless inside an
  2349.       AX=5D00h server call); if this fails, DOS resolves the name locally
  2350. SeeAlso: AX=1221h,INT 21/AH=60h
  2351. --------N-2F1124-----------------------------
  2352. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  2353.     AX = 1124h
  2354.     ES:DI -> SFT
  2355.     SS = DOS DS
  2356.     ???
  2357. Return: CX = ???
  2358. Note:    called by DOS 3.1+ kernel if AX=1126h returns CF set
  2359. SeeAlso: AX=1126h
  2360. --------N-2F1125-----------------------------
  2361. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  2362.     AX = 1125h
  2363.     STACK: WORD subfunction
  2364.         5D07h get print stream state
  2365.             Return: DL = current state
  2366.         5D08h set print stream state
  2367.             DL = new state
  2368.         5D09h finish print job
  2369. Return: CF set on error
  2370.         AX = error code (see INT 21/AH=59h)
  2371.     STACK unchanged
  2372. Note:    called by DOS 3.1+ kernel
  2373. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  2374. --------N-2F1126-----------------------------
  2375. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  2376.     AX = 1126h
  2377.     ES:DI -> SFT for file handle 4???
  2378.     SS = DOS DS???
  2379.     ???
  2380. Return: CF set on error
  2381. Notes:    called by DOS 3.1+ kernel
  2382.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  2383.       bit 11 of the device information word in the SFT set
  2384. SeeAlso: AX=1124h
  2385. --------N-2F1127-----------------------------
  2386. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2387.     AX = 1127h
  2388. Return: CF set
  2389.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2390. --------N-2F1128-----------------------------
  2391. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2392.     AX = 1128h
  2393. Return: CF set
  2394.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2395. --------N-2F1129-----------------------------
  2396. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2397.     AX = 1129h
  2398. Return: CF set
  2399.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2400. --------N-2F112A-----------------------------
  2401. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  2402.     AX = 112Ah
  2403.     DS = DOS DS
  2404.     ???
  2405. Return: ???
  2406. Note:    does something to each IFS driver
  2407. --------N-2F112B-----------------------------
  2408. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  2409.     AX = 112Bh
  2410.     SS = DOS DS
  2411.     CX = function/category
  2412.     DS:DX -> parameter block
  2413.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  2414.     ???
  2415. Return: CF set on error
  2416.         AX = DOS error code (see INT 21/AH=59h)
  2417.     CF clear if successful
  2418. Note:    called by DOS 4.0 kernel
  2419. --------N-2F112C-----------------------------
  2420. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - "UPDATE_CB" - ???
  2421.     AX = 112Ch
  2422.     SS = DOS DS
  2423.     SDA current SFT pointer -> SFT for file
  2424.     ???
  2425. Return: CF set on error
  2426. Note:    called by SHARE in DOS 5.0-6.0
  2427. --------N-2F112D-----------------------------
  2428. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  2429.     AX = 112Dh
  2430.     BL = subfunction (value of AL on INT 21)
  2431.         02h get extended attributes
  2432.         03h get extended attribute properties
  2433.         04h set extended attributes
  2434.         Return: CF clear
  2435.         else ???
  2436.         Return: CX = ??? (00h or 02h for DOS 4.01)
  2437.     ES:DI -> SFT for file
  2438.     SS = DOS DS
  2439. Return: DS = DOS DS
  2440. Note:    called by DOS 4.0 kernel on INT 21/AX=5702h,INT 21/AX=5703h,
  2441.       INT 21/AX=5704h
  2442. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  2443. --------N-2F112E-----------------------------
  2444. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE
  2445.     AX = 112Eh
  2446.     SS = DS = DOS DS
  2447.     ES:DI -> uninitialized SFT for file
  2448.     STACK: WORD file attribute for created/truncated file
  2449.             low byte = file attributes
  2450.             high byte = 00h normal create/open, 01h create new file
  2451.     SDA first filename pointer -> fully-qualified filename
  2452.     SDA extended file open action = action code (see INT 21/AX=6C00h)
  2453.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  2454. Return: CF set on error
  2455.         AX = error code
  2456.     CF clear if successful
  2457.         CX = result code
  2458.         01h file opened
  2459.         02h file created
  2460.         03h file replaced (truncated)
  2461.         SFT initialized (except handle count, which DOS manages itself)
  2462. Note:    called by DOS 4+ kernel
  2463. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  2464. --------N-2F112F-----------------------------
  2465. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  2466.     AX = 112Fh
  2467.     SS = DOS DS
  2468.     STACK: WORD function in low byte
  2469.         00h ???
  2470.             DS:SI -> Current Directory Structure???
  2471.             CL = drive (1=A:)
  2472.         01h ???
  2473.             DS:SI -> ???
  2474.             CL = file handle???
  2475.         02h ???
  2476.             DS:SI -> Current Directory Structure???
  2477.             DI = ???
  2478.             CX = drive (1=A:)
  2479.     ???
  2480. Return: CF set on error
  2481.         AX = DOS error code (see INT 21/AH=59h)
  2482.     CF clear if successful
  2483. Note:    called by DOS 4.0 kernel
  2484. SeeAlso: INT 21/AH=6Bh
  2485. --------N-2F1130-----------------------------
  2486. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  2487.     AX = 1130h
  2488. Return: ES = CS of resident IFSFUNC
  2489. --------N-2F1180-----------------------------
  2490. INT 2F - LAN Manager Enhanced DOS Services - ???
  2491.     AX = 1180h
  2492.     ???
  2493. Return: ???
  2494. --------N-2F1182-----------------------------
  2495. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  2496.     AX = 1182h
  2497.     ???
  2498. Return: ???
  2499. --------N-2F1184-----------------------------
  2500. INT 2F - LAN Manager Enhanced DOS - ???
  2501.     AX = 1184h
  2502.     ???
  2503. Return: ???
  2504. --------N-2F1186-----------------------------
  2505. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  2506.     AX = 1186h
  2507.     DS:SI -> stack frame (see below)
  2508. Return: CF clear if successful
  2509.     CF set if error
  2510.         AX = error code
  2511. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  2512.       file/printer services
  2513. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  2514.  
  2515. Format of DosReadAsynchNmPipe stack frame:
  2516. Offset    Size    Description
  2517.  00h    DWORD    -> number of bytes read
  2518.  04h    WORD    size of buffer
  2519.  06h    DWORD    -> buffer
  2520.  0Ah    DWORD    -> return code
  2521.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2522.  12h    WORD    handle
  2523. --------N-2F118A-----------------------------
  2524. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  2525.     AX = 118Ah
  2526.     BX = function (0000h or 0001h)
  2527. Return: CF clear if successful
  2528.         AX = 1100h success
  2529.     CF set if error
  2530.         AX = 0001h, etc.
  2531. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  2532. --------N-2F118B-----------------------------
  2533. INT 2F - LAN Manager Enhanced DOS - ???
  2534.     AX = 118Bh
  2535.     ???
  2536. Return: ???
  2537. --------N-2F118C-----------------------------
  2538. INT 2F - LAN Manager Enhanced DOS - ???
  2539.     AX = 118Ch
  2540.     ???
  2541. Return: ???
  2542. --------N-2F118E-----------------------------
  2543. INT 2F - LAN Manager Enhanced DOS - ???
  2544.     AX = 118Eh
  2545.     ???
  2546. Return: ???
  2547. --------N-2F118F-----------------------------
  2548. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  2549.     AX = 118Fh
  2550.     DS:SI -> stack frame (see below)
  2551. Return: CF clear if successful
  2552.     CF set if error
  2553.         AX = error code
  2554. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  2555.  
  2556. Format of DosReadAsynchNmPipe stack frame:
  2557. Offset    Size    Description
  2558.  00h    DWORD    -> number of bytes read
  2559.  04h    WORD    Size of buffer
  2560.  06h    DWORD    -> buffer
  2561.  0Ah    DWORD    -> return code
  2562.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2563.  12h    WORD    handle
  2564. --------N-2F1190-----------------------------
  2565. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  2566.     AX = 1190h
  2567.     DS:SI-> stack frame
  2568. Return: CF clear if successful
  2569.     CF set if error
  2570.         AX = error code
  2571. SeeAlso: AX=1186h,AX=1191h
  2572.  
  2573. Format of DosReadAsynchNmPipe2 stack frame:
  2574. Offset    Size    Description
  2575.  00h    DWORD    -> number of bytes read
  2576.  04h    WORD    size of buffer
  2577.  06h    DWORD    -> buffer
  2578.  0Ah    DWORD    -> return code
  2579.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2580.  12h    WORD    handle
  2581.  14h    DWORD    ???
  2582. --------N-2F1191-----------------------------
  2583. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  2584.     AX = 1191h
  2585.     DS:SI -> stack frame (see below)
  2586. Return: CF clear if successful
  2587.     CF set if error
  2588.         AX = error code
  2589. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  2590.  
  2591. Format of DosReadAsynchNmPipe2 stack frame:
  2592. Offset    Size    Description
  2593.  00h    DWORD    -> number of bytes read
  2594.  04h    WORD    size of buffer
  2595.  06h    DWORD    -> buffer
  2596.  0Ah    DWORD    -> return code
  2597.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2598.  12h    WORD    handle
  2599.  14h    DWORD    ???
  2600. --------D-2F1200-----------------------------
  2601. INT 2F U - DOS 3+ internal - INSTALLATION CHECK
  2602.     AX = 1200h
  2603. Return: AL = FFh (for compatibility with other INT 2F functions)
  2604. --------D-2F1201-----------------------------
  2605. INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE
  2606.     AX = 1201h
  2607.     SS = DOS DS (must be using a DOS internal stack)
  2608.     SDA current SFT pointer -> SFT of file to close
  2609. Return: CF set on error
  2610.     BX???
  2611.     CX new reference count of SFT
  2612.     ES:DI -> SFT for file
  2613. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  2614. --------D-2F1202-----------------------------
  2615. INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS
  2616.     AX = 1202h
  2617.     STACK: WORD vector number
  2618. Return: ES:BX -> interrupt vector
  2619.     STACK unchanged
  2620. --------D-2F1203-----------------------------
  2621. INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT
  2622.     AX = 1203h
  2623. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  2624. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  2625.       segment
  2626. --------D-2F1204-----------------------------
  2627. INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  2628.     AX = 1204h
  2629.     STACK: WORD character to normalize
  2630. Return: AL = normalized character (forward slash turned to backslash, all
  2631.         others unchanged)
  2632.     ZF set if path separator
  2633.     STACK unchanged
  2634. --------D-2F1205-----------------------------
  2635. INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  2636.     AX = 1205h
  2637.     STACK: WORD character to output
  2638. Return: STACK unchanged
  2639. Note:    can be called only from within DOS
  2640. --------D-2F1206-----------------------------
  2641. INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR
  2642.     AX = 1206h
  2643.     DI = error code
  2644.     BP:SI -> device driver header
  2645.     SS = DOS DS (must be using a DOS internal stack)
  2646.     STACK: WORD value to be passed to INT 24 in AX
  2647. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  2648.     STACK unchanged
  2649. SeeAlso: INT 24
  2650. --------D-2F1207-----------------------------
  2651. INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  2652.     AX = 1207h
  2653.     DS:DI -> disk buffer
  2654. Return: nothing
  2655. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  2656.       recently used is first); under DOS 3.3, the buffer is then moved to
  2657.       the start of the disk buffer chain if it was marked unused
  2658. Notes:    can be called only from within DOS
  2659.     this function is nearly the same as AX=120Fh
  2660. SeeAlso: AX=120Fh
  2661. --------D-2F1208-----------------------------
  2662. INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  2663.     AX = 1208h
  2664.     ES:DI -> SFT
  2665. Return: AX = original value of reference count
  2666. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  2667.       that the SFT is not in use).    It is the caller's responsibility to
  2668.       set the reference count to zero after cleaning up.
  2669.     used by network redirectors such as MSCDEX
  2670. SeeAlso: AX=1106h
  2671. --------D-2F1209-----------------------------
  2672. INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  2673.     AX = 1209h
  2674.     DS:DI -> disk buffer
  2675. Return: disk buffer marked unused, contents written to disk if buffer dirty
  2676. Note:    can be called only from within DOS
  2677. SeeAlso: AX=120Eh,AX=1215h
  2678. --------D-2F120A-----------------------------
  2679. INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  2680.     AX = 120Ah
  2681.     DS = SS = DOS DS (must be using a DOS internal stack)
  2682.     STACK: WORD extended error code
  2683. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  2684.     CF clear if retry, set otherwise
  2685.     STACK unchanged
  2686. Notes:    can only be called during a DOS function call, as it uses various
  2687.       fields in the SDA to set up the registers for the INT 24
  2688.     reportedly sets current DPB's first root directory sector to 1
  2689. SeeAlso: INT 24
  2690. --------D-2F120B-----------------------------
  2691. INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  2692.     AX = 120Bh
  2693.     ES:DI -> system file table entry for previous open of file
  2694.     STACK: WORD extended error code (should be 20h--sharing violation)
  2695. Return: CF clear if operation should be retried
  2696.     CF set if operation should not be retried
  2697.         AX = error code (20h) (see INT 21/AH=59h)
  2698.     STACK unchanged
  2699. Notes:    can only be called during a DOS function call
  2700.     should only be called if an attempt was made to open an already-open
  2701.       file contrary to the sharing rules
  2702.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  2703.       inheritance allowed
  2704. --------D-2F120C-----------------------------
  2705. INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  2706.     AX = 120Ch
  2707.     SDA current SFT pointer -> SFT for file
  2708.     DS = DOS DS
  2709.     SS = DOS DS (must be using a DOS internal stack)
  2710. Return: ES, DI, AX destroyed
  2711. Notes:    invokes "device open" call on device driver for SFT
  2712.     changes owner of last-accessed SFT to calling process if it was opened
  2713.       via FCB
  2714.     called by network redirectors such as MSCDEX
  2715. --------D-2F120D-----------------------------
  2716. INT 2F U - DOS 3+ internal - GET DATE AND TIME
  2717.     AX = 120Dh
  2718.     SS = DOS DS (must be using a DOS internal stack)
  2719. Return: AX = current date in packed format (see INT 21/AX=5700h)
  2720.     DX = current time in packed format (see INT 21/AX=5700h)
  2721. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  2722. --------D-2F120E-----------------------------
  2723. INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  2724.     AX = 120Eh
  2725.     SS = DOS DS (must be using a DOS internal stack)
  2726. Return: DS:DI -> first disk buffer
  2727. Notes:    clears "referenced" flag on all disk buffers
  2728.     in DOS 5+, this has become essentially a NOP, invoking the same code
  2729.       used by AX=1224h (SHARING DELAY)
  2730. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  2731. --------D-2F120F-----------------------------
  2732. INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  2733.     AX = 120Fh
  2734.     DS:DI -> disk buffer
  2735.     SS = DOS DS (must be using a DOS internal stack)
  2736. Return: DS:DI -> next buffer in buffer list
  2737. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  2738.       recently used is first); under DOS 3.3, the buffer is then moved to
  2739.       the start of the disk buffer chain if it was marked unused
  2740. Note:    this function is the same as AX=1207h except that it returns a
  2741.       pointer to the buffer following the specified buffer in the buffer
  2742.       chain
  2743. SeeAlso: AX=1207h
  2744. --------D-2F1210-----------------------------
  2745. INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  2746.     AX = 1210h
  2747.     DS:DI -> first disk buffer to check
  2748. Return: ZF clear if found
  2749.         DS:DI -> first unreferenced disk buffer
  2750.     ZF set if not found
  2751. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  2752.       used by AX=1224h (SHARING DELAY)
  2753. SeeAlso: AX=120Eh
  2754. --------D-2F1211-----------------------------
  2755. INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  2756.     AX = 1211h
  2757.     DS:SI -> ASCIZ filename to normalize
  2758.     ES:DI -> buffer for normalized filename
  2759. Return: destination buffer filled with uppercase filename, with slashes turned
  2760.     to backslashes
  2761. SeeAlso: AX=121Eh,AX=1221h
  2762. --------D-2F1212-----------------------------
  2763. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  2764.     AX = 1212h
  2765.     ES:DI -> ASCIZ string
  2766. Return: CX = length of string
  2767. SeeAlso: AX=1225h
  2768. --------D-2F1213-----------------------------
  2769. INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER
  2770.     AX = 1213h
  2771.     STACK: WORD character to convert to uppercase
  2772. Return: AL = uppercase character
  2773.     STACK unchanged
  2774. --------D-2F1214-----------------------------
  2775. INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS
  2776.     AX = 1214h
  2777.     DS:SI = first pointer
  2778.     ES:DI = second pointer
  2779. Return: ZF set if pointers are equal, ZF clear if not equal
  2780. --------D-2F1215-----------------------------
  2781. INT 2F U - DOS 3+ internal - FLUSH BUFFER
  2782.     AX = 1215h
  2783.     DS:DI -> disk buffer
  2784.     SS = DOS DS (must be using a DOS internal stack)
  2785.     STACK: WORD drives for which to skip buffer
  2786.         ignore buffer if drive same as high byte, or bytes differ and
  2787.         the buffer is for a drive OTHER than that given in low byte
  2788. Return: STACK unchanged
  2789. Note:    can be called only from within DOS
  2790. SeeAlso: AX=1209h
  2791. --------D-2F1216-----------------------------
  2792. INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  2793.     AX = 1216h
  2794.     BX = system file table entry number
  2795. Return: CF clear if successful
  2796.         ES:DI -> system file table entry
  2797.     CF set if BX greater than FILES=
  2798. Note:    supported by DR-DOS 5+
  2799. SeeAlso: AX=1220h
  2800. --------D-2F1217-----------------------------
  2801. INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  2802.     AX = 1217h
  2803.     SS = DOS DS (must be using a DOS internal stack)
  2804.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  2805. Return: CF set on error
  2806.         (drive > LASTDRIVE)
  2807.     CF clear if successful
  2808.         DS:SI -> current directory structure for specified drive
  2809.     STACK unchanged
  2810. SeeAlso: AX=1219h
  2811. --------D-2F1218-----------------------------
  2812. INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS
  2813.     AX = 1218h
  2814. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  2815. Note:    only valid while within DOS
  2816. --------D-2F1219-----------------------------
  2817. INT 2F U - DOS 3+ internal - SET DRIVE???
  2818.     AX = 1219h
  2819.     SS = DOS DS (must be using a DOS internal stack)
  2820.     STACK: WORD drive (0 = default, 1 = A:, etc)
  2821. Return: ???
  2822.     STACK unchanged
  2823. Notes:    calls AX=1217h
  2824.     builds a current directory structure if inside server call
  2825.       (INT 21/AX=5D00h)
  2826. SeeAlso: AX=1217h,AX=121Fh
  2827. --------D-2F121A-----------------------------
  2828. INT 2F U - DOS 3+ internal - GET FILE'S DRIVE
  2829.     AX = 121Ah
  2830.     DS:SI -> filename
  2831. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  2832.     DS:SI -> filename without leading X: (if present)
  2833. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  2834. --------D-2F121B-----------------------------
  2835. INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  2836.     AX = 121Bh
  2837.     CL = year - 1980
  2838. Return: AL = number of days in February
  2839. Note:    requires DS to be set to the DOS code segment
  2840. SeeAlso: INT 21/AH=2Bh
  2841. --------D-2F121C-----------------------------
  2842. INT 2F U - DOS 3+ internal - CHECKSUM MEMORY
  2843.     AX = 121Ch
  2844.     DS:SI -> start of memory to checksum
  2845.     CX = number of bytes
  2846.     DX = initial checksum
  2847.     SS = DOS DS (must be using a DOS internal stack)
  2848. Return: AX, CX destroyed
  2849.     DX = checksum
  2850.     DS:SI -> first byte after checksummed range
  2851. Notes:    used by DOS to determine day count since 1/1/80 given a date
  2852.     supported by DR-DOS 5.0+
  2853. SeeAlso: AX=121Dh
  2854. --------D-2F121D-----------------------------
  2855. INT 2F U - DOS 3+ internal - SUM MEMORY
  2856.     AX = 121Dh
  2857.     DS:SI -> memory to add up
  2858.     CX = 0000h
  2859.     DX = limit
  2860. Return: AL = byte which exceeded limit
  2861.     CX = number of bytes before limit exceeded
  2862.     DX = remainder after adding first CX bytes
  2863.     DS:SI -> byte beyond the one which exceeded the limit
  2864. Notes:    used by DOS to determine year or month given day count since 1/1/80
  2865.     supported by DR-DOS 5.0+
  2866. SeeAlso: AX=121Ch
  2867. --------D-2F121E-----------------------------
  2868. INT 2F U - DOS 3+ internal - COMPARE FILENAMES
  2869.     AX = 121Eh
  2870.     DS:SI -> first ASCIZ filename
  2871.     ES:DI -> second ASCIZ filename
  2872. Return: ZF set if filenames equivalent, ZF clear if not
  2873. Note:    supported by DR-DOS 5.0+
  2874. SeeAlso: AX=1211h,AX=1221h
  2875. --------D-2F121F-----------------------------
  2876. INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  2877.     AX = 121Fh
  2878.     SS = DOS DS (must be using a DOS internal stack)
  2879.     STACK: WORD drive letter
  2880. Return: ES:DI -> current directory structure (will be overwritten by next call)
  2881.     STACK unchanged
  2882. --------D-2F1220-----------------------------
  2883. INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  2884.     AX = 1220h
  2885.     BX = file handle
  2886. Return: CF set on error
  2887.         AL = 6 (invalid file handle)
  2888.     CF clear if successful
  2889.         ES:DI -> JFT entry for file handle in current process
  2890. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  2891.       file handle, or FFh if the handle is not open
  2892.     supported by DR-DOS 5.0+
  2893. SeeAlso: AX=1216h,AX=1229h
  2894. --------D-2F1221-----------------------------
  2895. INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME
  2896.     AX = 1221h
  2897.     DS:SI -> file name to be fully qualified
  2898.     ES:DI -> 128-byte buffer for resulting canonical file name
  2899.     SS = DOS DS (must be using a DOS internal stack)
  2900. Return: (see INT 21/AH=60h)
  2901. Note:    identical to INT 21/AH=60h
  2902. SeeAlso: AX=1123h,INT 21/AH=60h
  2903. --------D-2F1222-----------------------------
  2904. INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO
  2905.     AX = 1222h
  2906.     SS = DOS data segment
  2907.     SS:SI -> 4-byte records
  2908.         BYTE    error code, FFh = last record
  2909.         BYTE    error class, FFh = don't change
  2910.         BYTE    suggested action, FFh = don't change
  2911.         BYTE    error locus, FFh = don't change
  2912.     SDA error code set
  2913. Return: SI destroyed
  2914.     SDA error class, error locus, and suggested action fields set
  2915. Note:    can be called only from within DOS
  2916. SeeAlso: AX=122Dh,INT 21/AH=59h
  2917. --------D-2F1223-----------------------------
  2918. INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  2919.     AX = 1223h
  2920.     DS = DOS DS
  2921.     SS = DOS DS (must be using a DOS internal stack)
  2922.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  2923.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  2924. Return: CF set if no character device by that name found
  2925.     CF clear if found
  2926.         BH = low byte of device attribute word
  2927. Note:    can only be called from within DOS
  2928. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  2929. --------D-2F1224-----------------------------
  2930. INT 2F U - DOS 3+ internal - SHARING RETRY DELAY
  2931.     AX = 1224h
  2932.     SS = DOS DS (must be using a DOS internal stack)
  2933. Return: after delay set by INT 21/AX=440Bh, unless in server call
  2934.       (INT 21/AX=5D00h)
  2935. Note:    delay is dependent on the processor speed, and is skipped entirely if
  2936.       inside a server call
  2937. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  2938. --------D-2F1225-----------------------------
  2939. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  2940.     AX = 1225h
  2941.     DS:SI -> ASCIZ string
  2942. Return: CX = length of string
  2943. Note:    supported by DR-DOS 5.0+
  2944. SeeAlso: AX=1212h
  2945. --------D-2F1226-----------------------------
  2946. INT 2F U - DOS 3.3+ internal - OPEN FILE
  2947.     AX = 1226h
  2948.     CL = access mode
  2949.     DS:DX -> ASCIZ filename
  2950.     SS = DOS DS (must be using a DOS internal stack)
  2951. Return: CF set on error
  2952.         AL = error code (see INT 21/AH=59h)
  2953.     CF clear if successful
  2954.         AX = file handle
  2955. Notes:    can only be called from within DOS
  2956.     equivalent to INT 21/AH=3Dh    
  2957.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2958. SeeAlso: AX=1227h,INT 21/AH=3Dh
  2959. --------D-2F1227-----------------------------
  2960. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  2961.     AX = 1227h
  2962.     BX = file handle
  2963.     SS = DOS DS (must be using a DOS internal stack)
  2964. Return: CF set on error
  2965.         AL = 06h invalid file handle
  2966.     CF clear if successful
  2967. Notes:    can only be called from within DOS
  2968.     equivalent to INT 21/AH=3Eh
  2969.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2970. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  2971. --------D-2F1228BP4200-----------------------
  2972. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  2973.     AX = 1228h
  2974.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  2975.     BX = file handle
  2976.     CX:DX = offset in bytes
  2977.     SS = DOS DS (must be using a DOS internal stack)
  2978. Return: as for INT 21/AH=42h
  2979. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  2980.       function call
  2981.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  2982.       LSEEK, and restores frame pointer
  2983.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2984. SeeAlso: INT 21/AH=42h
  2985. --------D-2F1229-----------------------------
  2986. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  2987.     AX = 1229h
  2988.     BX = file handle
  2989.     CX = number of bytes to read
  2990.     DS:DX -> buffer
  2991.     SS = DOS DS (must be using a DOS internal stack)
  2992. Return: as for INT 21/AH=3Fh
  2993. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  2994.       a DOS function call
  2995.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2996. SeeAlso: AX=1226h,INT 21/AH=3Fh
  2997. --------D-2F122A-----------------------------
  2998. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  2999.     AX = 122Ah
  3000.     BX = entry point to set (0001h or 0002h)
  3001.     DS:SI -> FASTOPEN entry point
  3002.         (entry point not set if SI = FFFFh for DOS 4+)
  3003. Return: CF set if specified entry point already set
  3004. Notes:    entry point in BX is ignored under DOS 3.30
  3005.     both entry points set to same handler by DOS 4.01
  3006.     DOS 5.0 and 6.0 only set entry point 1
  3007.  
  3008. DOS 3.30+ FASTOPEN is called with:
  3009.     AL = 01h  Lookup
  3010.         CX = ??? seems to be offset
  3011.         DI = ??? seems to be offset
  3012.         SI = offset in DOS DS of filename
  3013.     AL = 02h  insert file into FASTOPEN cache
  3014.     AL = 03h  delete file from FASTOPEN cache
  3015.         SI = offset in DOS DS of filename
  3016.     AL = 04h  purge FASTOPEN cache
  3017.         AH = subfunction (00h,01h,02h)
  3018.         ES:DI -> ???
  3019.         CX = ??? (subfunctions 01h and 02h only)
  3020. Returns: CF set on error or not installed
  3021. Note: function 03h calls function 01h first
  3022.  
  3023. PC-DOS 4.01 FASTOPEN is additionally called with:
  3024.     AL = 04h ???
  3025.         AH = 03h
  3026.         ???
  3027.     AL = 05h ???
  3028.     AL = 0Bh ???
  3029.     AL = 0Ch ???
  3030.     AL = 0Dh ???
  3031.     AL = 0Eh ???
  3032.     AL = 0Fh ???
  3033.     AL = 10h ???
  3034.  
  3035. MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  3036.     AL = 04h  purge FASTOPEN cache
  3037.         AH = 03h
  3038.         ???
  3039.     AL = 05h ???
  3040.         DL = drive (00h = A:)
  3041.         ???
  3042.     AL = 06h ???
  3043.         ???
  3044. --------D-2F122B-----------------------------
  3045. INT 2F U - DOS 3.3+ internal - IOCTL
  3046.     AX = 122Bh
  3047.     BP = 44xxh
  3048.     SS = DOS DS (must be using a DOS internal stack)
  3049.     additional registers as appropriate for INT 21/AX=44xxh
  3050. Return: as for INT 21/AH=44h
  3051. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  3052.       a DOS function call
  3053.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  3054.       IOCTL, and restores frame pointer
  3055.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  3056. SeeAlso: INT 21/AH=44h
  3057. --------D-2F122C-----------------------------
  3058. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  3059.     AX = 122Ch
  3060. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  3061. Note:    although this function exists in DR-DOS 5.0, it returns 0000h:0000h
  3062. SeeAlso: INT 21/AH=52h
  3063. --------D-2F122D-----------------------------
  3064. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  3065.     AX = 122Dh
  3066. Return: AX = current extended error code
  3067. SeeAlso: AX=1222h,INT 21/AH=59h
  3068. --------D-2F122E-----------------------------
  3069. INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  3070.     AX = 122Eh
  3071.     DL = subfunction
  3072.         00h get standard DOS error table
  3073.         Return: ES:DI -> error table
  3074.                  (DOS 4: errors 00h-12h,50h-5Bh)
  3075.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  3076.         01h set standard DOS error table
  3077.         ES:DI -> error table
  3078.         02h get parameter error table (errors 00h-0Ah)
  3079.         Return: ES:DI -> error table
  3080.         03h set parameter error table
  3081.         ES:DI -> error table
  3082.         04h get critical/SHARE error table (errors 13h-2Bh)
  3083.         Return: ES:DI -> error table
  3084.         05h set critical/SHARE error table
  3085.         ES:DI -> error table
  3086.         06h get ??? error table
  3087.         Return: ES:DI -> error table or 0000h:0000h
  3088.         07h set ??? error table
  3089.         ES:DI -> error table
  3090.         08h get error message retriever (see below)
  3091.         Return: ES:DI -> FAR procedure to fetch error message 
  3092.         09h set ??? error table
  3093.         ES:DI -> error table
  3094. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  3095.       the offset of the error message table within COMMAND.COM, and the
  3096.       procedure returned by DL=08h should be called
  3097.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  3098.       with DL odd are ignored); they are always returned with segment 0001h
  3099.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  3100.       into a single error table
  3101. SeeAlso: AX=0500h,INT 21/AH=59h
  3102.  
  3103. Format of DOS 4.x error table:
  3104. Offset    Size    Description
  3105.  00h    BYTE    FFh
  3106.  01h  2 BYTEs    04h,00h (DOS version???)
  3107.  03h    BYTE    number of error headers following
  3108.  04h 2N WORDs    table of all error headers for table
  3109.         Offset    Size    Description
  3110.          00h    WORD    error message number
  3111.          02h    WORD    offset of error message from start of header
  3112.                 error messages are count byte followed by msg
  3113. Note:    DOS 5 error tables consist of one word per error number; each word
  3114.       contains either the offset of a counted string or 0000h
  3115.  
  3116. Call error retrieval function with:
  3117.     AX = error number
  3118.     DI = offset of error table
  3119. Return: ES:DI -> error message (counted string)
  3120. Notes:    this function needs to access COMMAND.COM if the messages were not
  3121.       loaded into memory permanently with /MSG; the caller should assume
  3122.       that the returned message will be overwritten by the next call of
  3123.       the function
  3124.     supported by DR-DOS 5.0
  3125.  
  3126. Values for parameter errors:
  3127.  01h    Too many parameters
  3128.  02h    Required Parameter missing
  3129.  03h    Invalid switch
  3130.  04h    Invalid keyword
  3131.  06h    Parameter value not in allowed range
  3132.  07h    Parameter value not allowed
  3133.  08h    Parameter value not allowed
  3134.  09h    Parameter format not correct
  3135.  0Ah    Invalid parameter
  3136.  0Bh    Invalid parameter combination
  3137. --------D-2F122F-----------------------------
  3138. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  3139.     AX = 122Fh
  3140.     DX = DOS version number (0000h = return true DOS version)
  3141. Note:    not available under DR-DOS 5.0 or 6.0
  3142. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  3143. ----------2F12FFBX0006-----------------------
  3144. INT 2F U - DR-DOS 6 - VIDEO MEMORY SPACE CONTROL
  3145.     AX = 12FFh
  3146.     BX = 0006h
  3147.     DX = 0000h
  3148.     CX = function
  3149.         0000h get status of video memory space (MEMMAX /V)
  3150.         0001h map memory into video memory space (MEMMAX +V)
  3151.         0002h unmap memory from video memory space (MEMMAX -V)
  3152. Return: ???
  3153. --------D-2F13-------------------------------
  3154. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  3155.     AH = 13h
  3156.     DS:DX -> interrupt handler disk driver calls on read/write
  3157.     ES:BX = address to restore INT 13 to on system halt (exit from root
  3158.          shell) or warm boot (INT 19)
  3159. Return: DS:DX from previous invocation of this function
  3160.     ES:BX from previous invocation of this function
  3161. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  3162.       original INT 13 handler.  The first is for disk change detection
  3163.       on floppy drives, the second is for tracking formatting calls and
  3164.       correcting DMA boundary errors, the third is for working around
  3165.       problems in a particular version of IBM's ROM BIOS
  3166.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  3167.       also points there unless IO.SYS has installed a special filter for
  3168.       hard disk reads (on systems with model byte FCh and BIOS date
  3169.       "01/10/84" only), in which case it points at the special filter
  3170.     most DOS 3.3+ disk access is via the vector in DS:DX, although a few
  3171.       functions are still invoked via an INT 13 instruction
  3172.     this is a dangerous security loophole for any virus-monitoring software
  3173.       which does not trap this call ("INT13", "Nomenklatura", and many
  3174.       Bulgarian viruses are known to use it to get the original ROM entry
  3175.       point)
  3176. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  3177. ----------2F13-------------------------------
  3178. INT 2F U - MS-NET - ???
  3179.     AH = 13h
  3180.     ???
  3181. Return: ???
  3182. Note:    supposedly used to move (or control the movement of) NCBs
  3183. --------U-2F1400-----------------------------
  3184. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  3185.     AX = 1400h
  3186. Return: AL = 00h not installed, OK to install
  3187.          01h not installed, not OK
  3188.          FFh installed
  3189. Notes:    called by DOS v3.3+ kernel
  3190.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  3191.     supported by DR-DOS 5.0
  3192.     documented for MS-DOS 5+, but undocumented in prior versions
  3193. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  3194. --------D-2F1400-----------------------------
  3195. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  3196.     AX = 1400h
  3197. Return: AX = FFFFh if installed
  3198.         BX = maximum memory required to save screen and keyboard info
  3199.     CF clear if successful
  3200.     CF set on error
  3201.         AX = error code
  3202.         0002h invalid function
  3203.         0004h unknown error
  3204. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  3205.       to communicate with the user
  3206. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  3207. --------U-2F1401-----------------------------
  3208. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  3209.     AX = 1401h
  3210.     DS:SI -> internal code page structure (see below)
  3211.     BX = new code page (see INT 21/AX=6602h)
  3212.     DX = country code???
  3213. Return: AL = status
  3214.          00h successful
  3215.          else DOS error code
  3216. Note:    called by DOS v3.3+ kernel
  3217. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  3218.  
  3219. Format of DOS 3.30 internal code page structure:
  3220. Offset    Size    Description
  3221.  00h  8 BYTEs    ???
  3222.  08h 64 BYTEs    name of country information file
  3223.  48h    WORD    system code page
  3224.  4Ah    WORD    number of supported subfunctions
  3225.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  3226.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  3227.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  3228.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  3229.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  3230. --------D-2F1401-----------------------------
  3231. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  3232.     AX = 1401h
  3233.     DL = function (00h open, 01h close)
  3234.     DH = wait flag
  3235.         00h block until screen opens
  3236.         01h return error if screen is not available
  3237.         02h urgent--always open screen immediately
  3238. Return: CF clear if successful
  3239.         BX = amount of memory needed to save screen and keyboard info,
  3240.         0000h if default save location can be used (only if DH was 02h)
  3241.     CF set on error
  3242. Note:    the application using the screen is frozen until the popup screen is
  3243.       closed
  3244. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  3245. --------U-2F1402-----------------------------
  3246. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  3247.     AX = 1402h
  3248.     BP = subfunction (same as AL for INT 21/AH=65h)
  3249.     BX = code page (see INT 21/AX=6602h)
  3250.     DX = country code (see INT 21/AH=38h)
  3251.     DS:SI -> internal code page structure (see AX=1401h)
  3252.     ES:DI -> user buffer
  3253.     CX = size of user buffer
  3254. Return: AL = status
  3255.         00h successful
  3256.         else DOS error code
  3257. Notes:    called by DOS v3.3+ kernel on INT 21/AH=65h
  3258.     code page structure apparently only needed for COUNTRY.SYS pathname
  3259. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  3260. --------D-2F1402-----------------------------
  3261. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  3262.     AX = 1402h
  3263.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  3264. Return: CF clear if successful
  3265.     CF set on error
  3266.         AX = error code
  3267.         0001h process does not own screen
  3268.         0004h unknown error
  3269.         0005h invalid pointer
  3270. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  3271. --------U-2F1403-----------------------------
  3272. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  3273.     AX = 1403h
  3274.     DS:SI -> internal code page structure (see AX=1401h)
  3275.     BX = code page (see INT 21/AX=6602h)
  3276.     DX = country code (see INT 21/AH=38h)
  3277. Return: AL = status 
  3278.          ???
  3279. Note:    called by DOS v3.3+ kernel on INT 21/AH=38h
  3280. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  3281. --------D-2F1403-----------------------------
  3282. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  3283.     AX = 1403h
  3284.     ES:DI -> buffer containing saved screen
  3285.         (0000h:0000h for default buffer in POPUP)
  3286. Return: CF clear if successful
  3287.     CF set on error
  3288.         AX = error code (see AX=1402h"POPUP")
  3289. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  3290. --------U-2F1404-----------------------------
  3291. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  3292.     AX = 1404h
  3293.     BX = code page (see INT 21/AX=6602h)
  3294.     DX = country code (see INT 21/AH=38h)
  3295.     DS:SI -> internal code page structure (see AX=1401h)
  3296.     ES:DI -> user buffer
  3297. Return: AL = status
  3298.          ???
  3299. Notes:    called by DOS v3.3+ kernel on INT 21/AH=38h
  3300.     code page structure apparently only needed for COUNTRY.SYS pathname
  3301. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  3302. --------U-2F14FE-----------------------------
  3303. INT 2F U - DR-DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  3304.     AX = 14FEh
  3305.     BX = code page (FFFFh=global code page) (see INT 21/AX=6602h)
  3306.     DX = country ID (FFFFh=current country) (see INT 21/AH=38h)
  3307.     ES:DI -> country information buffer
  3308.     CL = info ID
  3309.         01h get general internationalization info
  3310.         02h get pointer to uppercase table
  3311.         04h get pointer to filename uppercase table
  3312.         05h get pointer to filename terminator table
  3313.         06h get pointer to collating sequence table
  3314.         07h get pointer to Double-Byte Character Set table
  3315.     CF set (used to return error if not installed)
  3316. Return: CF clear if successful
  3317.         DS:SI -> requested information
  3318.     CF set on error
  3319. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  3320.       or FFh on entry.
  3321.     the DR-DOS kernel calls this function on INT 21/AX=6501h
  3322.     the value in CL is not range-checked by the DR-DOS 5.0 NLSFUNC
  3323. SeeAlso: AX=14FFh,INT 21/AH=65h
  3324.  
  3325. Format of DR-DOS COUNTRY.SYS file:
  3326. Offset    Size    Description
  3327.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  3328.  7Eh    WORD    signature EDC1h
  3329.  80h    var    country pointer records
  3330.      Offset    Size    Description
  3331.      00h    WORD    country code (0000h if end of array)
  3332.      02h    WORD    code page
  3333.      04h    WORD    ??? (0000h)
  3334.      06h  7 WORDs    offsets in file for data tables for subfunctions
  3335.              01h-07h
  3336.  var    var    country information
  3337. --------U-2F14FF-----------------------------
  3338. INT 2F U - DR-DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  3339.     AX = 14FFh
  3340.     BX = code page
  3341. Return: AX = ???
  3342.     ZF set if AX=0000h
  3343. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  3344.       or FFh on entry.
  3345.     passes codepage preparation request to each character device supporting
  3346.       the generic IOCTL call
  3347. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  3348. --------U-2F1500-----------------------------
  3349. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  3350.     AX = 1500h
  3351. Return: AX = FFFFh
  3352.     ES:DI -> ??? (graphics data?)
  3353. Note:    this installation check conflicts with the CD-ROM Extensions
  3354.       installation check; moved to AX=AC00h in later versions
  3355. SeeAlso: AX=AC00h
  3356. --------d-2F1500BX0000-----------------------
  3357. INT 2F - CD-ROM - INSTALLATION CHECK
  3358.     AX = 1500h
  3359.     BX = 0000h
  3360. Return: BX = number of CD-ROM drive letters used
  3361.     CX = starting drive letter (0=A:)
  3362. Notes:    this installation check DOES NOT follow the format used by other
  3363.       software
  3364.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  3365.       installation check
  3366. SeeAlso: INT 2F/AX=D000h"Lotus"
  3367. --------d-2F1501-----------------------------
  3368. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  3369.     AX = 1501h
  3370.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  3371. Return: buffer filled, for each drive letter
  3372.       BYTE    subunit number in driver
  3373.       DWORD address of device driver header
  3374. --------d-2F1502-----------------------------
  3375. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  3376.     AX = 1502h
  3377.     ES:BX -> 38-byte buffer for name of copyright file
  3378.     CX = drive number (0=A:)
  3379. Return: CF set if drive is not a CD-ROM drive
  3380.         AX = 15 (invalid drive)
  3381.     CF clear if successful
  3382. SeeAlso: AX=1503h
  3383. --------d-2F1503-----------------------------
  3384. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  3385.     AX = 1503h
  3386.     ES:BX -> 38-byte buffer for name of abstract file
  3387.     CX = drive number (0=A:)
  3388. Return: CF set if drive is not a CD-ROM drive
  3389.         AX = 15 (invalid drive)
  3390.     CF clear if successful
  3391. SeeAlso: AX=1502h
  3392. --------d-2F1504-----------------------------
  3393. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  3394.     AX = 1504h
  3395.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  3396.     CX = drive number (0=A:)
  3397. Return: CF set if drive is not a CD-ROM drive
  3398.         AX = 15 (invalid drive)
  3399.     CF clear if successful
  3400. --------d-2F1505-----------------------------
  3401. INT 2F - CD-ROM - READ VTOC
  3402.     AX = 1505h
  3403.     ES:BX -> 2048-byte buffer
  3404.     CX = drive number (0=A:)
  3405.     DX = sector index (0=first volume descriptor,1=second,...)
  3406. Return: CF set on error
  3407.         AX = error code (15=invalid drive,21=not ready)
  3408.     CF clear if successful
  3409.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  3410. --------d-2F1506-----------------------------
  3411. INT 2F - CD-ROM - TURN DEBUGGING ON
  3412.     AX = 1506h
  3413.     BX = debugging function to enable
  3414. Note:    reserved for development
  3415. SeeAlso: AX=1507h
  3416. --------d-2F1507-----------------------------
  3417. INT 2F - CD-ROM - TURN DEBUGGING OFF
  3418.     AX = 1507h
  3419.     BX = debugging function to disable
  3420. Note:    reserved for development
  3421. SeeAlso: AX=1506h
  3422. --------d-2F1508-----------------------------
  3423. INT 2F - CD-ROM - ABSOLUTE DISK READ
  3424.     AX = 1508h
  3425.     ES:BX -> buffer
  3426.     CX = drive number (0=A:)
  3427.     SI:DI = starting sector number
  3428.     DX = number of sectors to read
  3429. Return: CF set on error
  3430.         AL = error code (15=invalid drive,21=not ready)
  3431.     CF clear if successful
  3432. SeeAlso: AX=1509h
  3433. --------d-2F1509-----------------------------
  3434. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  3435.     AX = 1509h
  3436.     ES:BX -> buffer
  3437.     CX = drive number (0=A:)
  3438.     SI:DI = starting sector number
  3439.     DX = number of sectors to write
  3440. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  3441. SeeAlso: AX=1508h
  3442. --------d-2F150A-----------------------------
  3443. INT 2F - CD-ROM - RESERVED
  3444.     AX = 150Ah
  3445. --------d-2F150B-----------------------------
  3446. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  3447.     AX = 150Bh
  3448.     CX = drive number (0=A:)
  3449. Return: BX = ADADh if MSCDEX.EXE installed
  3450.         AX = 0000h if drive not supported
  3451.         nonzero if supported
  3452. SeeAlso: AX=150Dh
  3453. --------d-2F150C-----------------------------
  3454. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION
  3455.     AX = 150Ch
  3456. Return: BH = major version
  3457.     BL = minor version
  3458. Note:    MSCDEX.EXE versions prior to 2.00 return BX=0
  3459. --------d-2F150D-----------------------------
  3460. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  3461.     AX = 150Dh
  3462.     ES:BX -> buffer for drive letter list (1 byte per drive)
  3463. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  3464.     to the drive in the same position for function 1501h
  3465. SeeAlso: AX=150Bh
  3466. --------d-2F150E-----------------------------
  3467. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  3468.     AX = 150Eh
  3469.     BX = subfunction
  3470.         00h get preference
  3471.         DX = 0000h
  3472.         Return: DX = preference settings
  3473.         01h set preference
  3474.         DH = volume descriptor preference
  3475.             01h = primary volume descriptor
  3476.             02h = supplementary volume descriptor
  3477.         DL = supplementary volume descriptor preference
  3478.             01h = shift-Kanji
  3479.     CX = drive number (0=A:)
  3480. Return: CF set on error
  3481.         AX = error code (15=invalid drive,1=invalid function)
  3482.     CF clear if successful
  3483. --------d-2F150F-----------------------------
  3484. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  3485.     AX = 150Fh
  3486.     CL = drive number (0=A:)
  3487.     CH bit 0 = copy flag
  3488.         clear if direct copy
  3489.         set if copy to structure which removed ISO/High Sierra diffs
  3490.     ES:BX -> ASCIZ path name
  3491.     SI:DI -> buffer for directory entry (see below)
  3492.          minimum 255 bytes for direct copy
  3493. Return: CF set on error
  3494.         AX = error code
  3495.     CF clear if succesful
  3496.         AX = disk format (0=High Sierra,1=ISO 9660)
  3497.  
  3498. Format of directory entry (direct copy):
  3499. Offset    Size    Description
  3500.  00h    BYTE  length of directory entry
  3501.  01h    BYTE  length of XAR in Logical Block Numbers
  3502.  02h    DWORD LBN of data, Intel (little-endian) format
  3503.  06h    DWORD LBN of data, Motorola (big-endian) format
  3504.  0Ah    DWORD length of file, Intel format
  3505.  0Eh    DWORD length of file, Motorola format
  3506. ---High Sierra---
  3507.  12h  6 BYTEs date and time
  3508.  18h    BYTE  bit flags
  3509.  19h    BYTE  reserved
  3510. ---ISO 9660---
  3511.  12h  7 BYTEs date and time
  3512.  19h    BYTE  bit flags
  3513. ---both formats---
  3514.  1Ah    BYTE  interleave size
  3515.  1Bh    BYTE  interleave skip factor
  3516.  1Ch    WORD  volume set sequence number, Intel format
  3517.  1Eh    WORD  volume set sequence number, Motorola format
  3518.  20h    BYTE  length of file name
  3519.  21h  N BYTEs file name
  3520.     BYTE (optional) padding if filename is odd length
  3521.       N BYTEs system data
  3522.  
  3523. Format of directory entry (canonicalized):
  3524. Offset    Size    Description
  3525.  00h    BYTE    length of XAR in Logical Block Numbers
  3526.  01h    DWORD    Logical Block Number of file start
  3527.  05h    WORD    size of disk in logical blocks
  3528.  07h    DWORD    file length in bytes
  3529.  0Bh  7 BYTEs    date and time
  3530.  12h    BYTE    bit flags
  3531.  13h    BYTE    interleave size
  3532.  14h    BYTE    interleave skip factor
  3533.  15h    WORD    volume set sequence number
  3534.  17h    BYTE    length of file name
  3535.  18h 38 BYTEs    ASCIZ filename
  3536.  3Eh    WORD    file version number
  3537.  40h    BYTE    number of bytes of system use data
  3538.  41h 220 BYTEs    system use data
  3539. --------d-2F1510-----------------------------
  3540. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  3541.     AX = 1510h
  3542.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  3543.     ES:BX -> CD-ROM device driver request header (see AX=0802h)
  3544. --------W-2F1600-----------------------------
  3545. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  3546.     AX = 1600h
  3547. Return: AL = status
  3548.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  3549.         01h Windows/386 2.x running
  3550.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  3551.              mode nor Windows/386 2.x running) (obsolete--see note)
  3552.         FFh Windows/386 2.x running
  3553.     AL = anything else
  3554.         AL = Windows major version number >= 3
  3555.         AH = Windows minor version number
  3556. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  3557.       drivers, TSRs, and applications) to cooperate with multitasking
  3558.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  3559.     certain calls are also supported in the Microsoft 80286 DOS extender in
  3560.       Windows standard mode
  3561.     this function served as the installation check and AX=1610h served to
  3562.       get the driver entry point for XMS version 1, which is now obsolete.
  3563.       Use AX=4300h and AX=4310h instead
  3564. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  3565. Index:    installation check;XMS version 1
  3566. --------W-2F1602-----------------------------
  3567. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  3568.     AX = 1602h
  3569. Return: ES:DI -> Windows/386 2.x API procedure entry point
  3570. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  3571.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  3572.         AX = 0000h
  3573.         ES:DI -> return address
  3574.         JUMP to address returned from INT 2F/AX=1602h
  3575.     After JUMP, at return address:
  3576.         BX = current VM ID.
  3577. SeeAlso: AX=C020h
  3578. --------W-2F1603-----------------------------
  3579. INT 2F - MS Windows/386 - GET INSTANCE DATA
  3580.     AX = 1603h
  3581. Return: AX = 5248h ('RH') if supported
  3582.         DS:SI -> Windows/386 instance data (see below)
  3583. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  3584.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  3585.       supported, as is the case in DOS versions prior to 5.0
  3586.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3587.       this function, DOSMGR's behavior, and instancing in general
  3588. SeeAlso: AX=1607h/BX=0015h
  3589.  
  3590. Format of Windows/386 instance data:
  3591. Offset    Size    Description
  3592.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  3593.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  3594.          0000h if not applicable
  3595.  04h    WORD    number of instance data entries (max 32)
  3596.  06h    Array of instance data entries
  3597.      Offset    Size    Description
  3598.      00h    WORD    segment (0002h = DOS kernel)
  3599.      02h    WORD    offset
  3600.      04h    WORD    size
  3601. --------W-2F1605-----------------------------
  3602. INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST
  3603.     AX = 1605h
  3604.     ES:BX = 0000h:0000h
  3605.     DS:SI = 0000h:0000h
  3606.     CX = 0000h
  3607.     DX = flags
  3608.         bit 0 = 0 if Windows enhanced-mode initialization
  3609.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  3610.         bits 1-15 reserved (undefined)
  3611.     DI = version number (major in upper byte, minor in lower)
  3612. Return: CX = 0000h if okay for Windows to load
  3613.     CX <> 0 if Windows should not load
  3614.     ES:BX -> startup info structure (see below)
  3615.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  3616. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  3617.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  3618.       driver or TSR can watch for this broadcast and return the appropriate
  3619.       values.  If the driver or TSR returns CX <> 0, it is also its
  3620.       responsibility to display an error message.
  3621.     each handler must first chain to the prior INT 2F handler with
  3622.       registers unchanged before processing the call
  3623.     if the handler requires local data on a per-VM basis, it must store the
  3624.       returned ES:BX in the "next" field of a startup info structure and
  3625.       return a pointer to that structure in ES:BX
  3626.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  3627.       already nonzero, the TSR must fail the initialization by setting CX
  3628.       nonzero
  3629. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  3630.  
  3631. Format of Startup Information Structure:
  3632. Offset    Size    Description
  3633.  00h  2 BYTEs    major, minor version of info structure
  3634.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  3635.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  3636.  0Ah    DWORD    virtual device reference data (see below)
  3637.          (only used if above nonzero)
  3638.  0Eh    DWORD    pointer to instance data records or 0000h:0000h
  3639.  
  3640. Format of one Instance Item in array:
  3641. Offset    Size    Description
  3642.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  3643.  04h    WORD    size of instance data
  3644.  
  3645. Format of Virtual Device Reference Data:
  3646. Offset    Size    Description
  3647.  00h    DWORD    physical address of ??? or 00000000h
  3648.  04h    DWORD    physical address of ??? table
  3649.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  3650.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  3651.          00000000h = end of table
  3652. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  3653.       chain, the second pointer to a field of 40h bytes followed by a
  3654.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  3655.       the start segment of the UMB area
  3656.  
  3657. Virtual mode enable/disable procedure called with:
  3658.     AX = 0000h disable V86 mode
  3659.     AX = 0001h enable V86 mode
  3660.     interrupts disabled
  3661. Return: CF set on error
  3662.     CF clear if successful
  3663.     interrupts disabled
  3664. --------W-2F1606-----------------------------
  3665. INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST
  3666.     AX = 1606h
  3667.     DX = flags
  3668.         bit 0 = 0 if Windows enhanced-mode exit
  3669.         bit 0 = 1 if Microsoft 286 DOS extender exit
  3670.         bits 1-15 reserved (undefined)
  3671. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  3672.       broadcast will be issued immediately.
  3673.     this call will be issued in real mode
  3674. SeeAlso: AX=1605h,AX=1609h
  3675. --------W-2F1607-----------------------------
  3676. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  3677.     AX = 1607h
  3678.     BX = virtual device ID (see INT 2F/AX=1684h)
  3679.     CX = (usually) callout subfunction
  3680. Return: (usually) AX,BX,CX,DX,ES contain results
  3681. Notes:    more of a convention than an API, this call specifies a standard
  3682.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  3683.       to DOS device drivers and TSRs
  3684.     see below for details on several virtual devices
  3685. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  3686. SeeAlso: AX=1684h,AX=C020h
  3687. --------W-2F1607BX0006-----------------------
  3688. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  3689.     AX = 1607h
  3690.     BX = 0006h (VxD identifier of "V86MMGR")
  3691.     CX = 0000h
  3692. Return: AX = status
  3693.         0000h if local A20 state changed
  3694.         1607h if A20 unchanged
  3695.         other if global A20 state changed
  3696. --------W-2F1607BX000C-----------------------
  3697. INT 2F - MS Windows - "VMD" VIRTUAL DEVICE API
  3698.     AX = 1607h
  3699.     BX = 000Ch (VxD identifier of "VMD")
  3700. Return: CX = nonzero if mouse driver already virtualized
  3701. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  3702.       nonzero; if yes, it will not automatically virtualize the mouse
  3703.       driver.  This would be used if MOUSE.COM already virtualizes
  3704.       itself using the Windows API.
  3705. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  3706. --------W-2F1607BX0014-----------------------
  3707. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  3708.     AX = 1607h
  3709.     BX = 0014H (VxD identifier of "VNETBIOS")
  3710. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  3711.         command code (see below)
  3712. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  3713.       the NetBIOS has an extensions Windows should know about
  3714. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0015h
  3715.  
  3716. Values for action code:
  3717.  00h    "VN_Unknown" unknown command
  3718.  04h    "VN_No_Map"  no memory mapping necessary
  3719.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  3720.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  3721.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  3722.  14h    "VN_Chain_Send"     the chain-send command
  3723.  18h    "VN_Cancel"    special case for cancel command
  3724.  1Ch    "VN_Buffer_In"    buffer is incoming
  3725.  20h    "VN_Buffer_Out" buffer is outgoing
  3726.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  3727. --------D-2F1607BX0015-----------------------
  3728. INT 2F - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  3729.     AX = 1607h
  3730.     BX = 0015h (VxD identifier of "DOSMGR")
  3731.     CX = function
  3732.         0000h query instance processing
  3733.             DX = 0000h
  3734.         Return: CX = state
  3735.                 0000h not instanced
  3736.                 other instanced (DOS 5+ kernel returns 0001h)
  3737.                 DX = segment of DOS drivers or 0000h for
  3738.                     default of 0070h
  3739.                 ES:BX -> patch table (see below)
  3740.         0001h set patches in DOS
  3741.         DX = bit mask of patch requests
  3742.             bit 0 enable critical sections
  3743.             bit 1 NOP setting/checking user ID
  3744.             bit 2 turn INT 21/AH=3Fh on STDIN into polling loop
  3745.             bit 3 trap stack fault in "SYSINIT" to WIN386
  3746.             bit 4 BIOS patch to trap "Insert disk X:" to WIN386
  3747.         Return: AX = B97Ch
  3748.             BX = bit mask of patches applied
  3749.             DX = A2ABh
  3750.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  3751.         DX = bit mask of patch requests (see function 0001h)
  3752.         0003h get size of DOS data structures
  3753.         DX = bit mask of request (only one bit can be set)
  3754.             bit 0: Current Directory Structure size
  3755.         Return: if supported request:
  3756.                 AX = B97Ch
  3757.                 CX = size in bytes of requested structure
  3758.                 DX = A2ABh
  3759.             else:
  3760.                 all registers preserved
  3761.         0004h determine instanced data structures
  3762.         Return: AX = B97Ch if supported
  3763.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  3764.             BX = bit mask of instanced items
  3765.                 bit 0: CDS
  3766.                 bit 1: SFT
  3767.                 bit 2: device list
  3768.                 bit 3: DOS swappable data area
  3769.         0005h get device driver size
  3770.         ES = segment of device driver
  3771.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  3772.             DX:AX = A2ABh:B97Ch if successful
  3773.                 BX:CX = size of device driver in bytes
  3774. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  3775.       been instanced via this API and will not perform its own default
  3776.       instancing of the normal DOS/BIOS data if so; if this API is not
  3777.       supported, DOSMGR will also try to access instancing data through
  3778.       INT 2F/AX=1603h
  3779.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  3780.       tables of instancing information for earlier versions of DOS
  3781.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3782.       DOSMGR's behavior and instancing in general
  3783. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
  3784.  
  3785. Format of patch table:
  3786. Offset    Size    Description
  3787.  00h  2 BYTEs    DOS version (major, minor)
  3788.  02h    WORD    offset in DOS data segment of "SAVEDS"
  3789.  04h    WORD    offset in DOS data segment of "SAVEBX"
  3790.  06h    WORD    offset in DOS data segment of InDOS flag
  3791.  08h    WORD    offset in DOS data segment of User ID word
  3792.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  3793.          critical section calls (see INT 2A/AH=80h)
  3794.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  3795.          containing segment of last MCB in conventional memory
  3796. --------E-2F1607BX22C0-----------------------
  3797. INT 2F - Rational Systems DOS/4GW - ???
  3798.     AX = 1607h
  3799.     BX = 22C0h
  3800.     ???
  3801. Return: ???
  3802. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  3803. --------W-2F1608-----------------------------
  3804. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  3805.     AX = 1608h
  3806. Notes:    called after all installable devices have been initialized
  3807.     real-mode software may be called between the Windows enhanced-mode init
  3808.       call (AX=1605h) and this call; the software must detect this
  3809.       situation
  3810. SeeAlso: AX=1605h,AX=1609h
  3811. --------W-2F1609-----------------------------
  3812. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  3813.     AX = 1609h
  3814. Note:    called at the beginning of a normal exit sequence; not made in the
  3815.       event of a fatal system crash
  3816. SeeAlso: AX=1606h,AX=1608h
  3817. --------W-2F160A-----------------------------
  3818. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  3819.     AX = 160Ah
  3820. Return: AX = 0000h if call supported
  3821.         BX = version (BH=major, BL=minor)
  3822.         CX = mode (0002h = standard, 0003h = enhanced)
  3823. SeeAlso: AX=1600h,AX=4680h
  3824. --------W-2F160B-----------------------------
  3825. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  3826.     AX = 160Bh
  3827.     ES:DI -> communication structure (see below) or 0000h:0000h
  3828. Return: ES:DI -> communication structure
  3829. Desc:    this call allows Windows-aware TSRs to make themselves known to
  3830.       Windows.
  3831. Note:    the TSR should allocate a communication structure, place the given
  3832.       ES:DI pointer in the first field, and return a pointer to the new
  3833.       structure
  3834. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  3835.  
  3836. Format of TSR-to-Windows communication structure:
  3837. Offset    Size    Description
  3838.  00h    DWORD    pointer to next structure
  3839.  04h    WORD    PSP segment
  3840.  06h    WORD    API version ID (0100h)
  3841.  08h    WORD    EXEC flags
  3842.         bit 0: "WINEXEC"
  3843.         bit 1: "LOADLIBRARY"
  3844.         bit 2: "OPENDRIVER"
  3845.  0Ah    WORD    "exec_cmd_show"
  3846.  0Ch    DWORD    "exec_cmd"
  3847.  10h  4 BYTEs    reserved (0)
  3848.  14h    DWORD    pointer to TSR ID block (see below)
  3849.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  3850.  
  3851. Format of Norton Utilities 6.0 TSR ID block:
  3852. Offset    Size    Description
  3853.  00h    WORD    length of name string
  3854.  02h  N BYTEs    name of TSR's executable
  3855. --------W-2F160C-----------------------------
  3856. INT 2F - MS Windows 3.1 - DETECT ROMs
  3857.     AX = 160Ch
  3858.     ???
  3859. Return: ???
  3860. Note:    used by ROM Windows
  3861. SeeAlso: AX=160Bh
  3862. --------m-2F1610-----------------------------
  3863. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  3864.     AX = 1610h
  3865.     details unavailable
  3866. Note:    this function and AX=1600 were only used in XMS version 1 and are now
  3867.       obsolete.  Use AX=4300h and AX=4310h instead
  3868. SeeAlso: AX=1600h,AX=4310h
  3869. --------W-2F1680-----------------------------
  3870. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  3871.     AX = 1680h
  3872. Return: AL = 00h if the call is supported
  3873.     AL = 80h (unchanged) if the call is not supported
  3874. Notes:    programs can use this function in idle loops to enhance performance
  3875.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  3876.       DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS
  3877.       applications
  3878.     does not block the program; it just gives up the remainder of the time
  3879.       slice
  3880.     should not be used by Windows-specific programs
  3881. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  3882. --------W-2F1681-----------------------------
  3883. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  3884.     AX = 1681h
  3885. Notes:    used to prevent a task switch from occurring
  3886.     should be followed by an INT 2F/AX=1682h call as soon as possible
  3887.     nested calls are allowed, and must be followed by an appropriate number
  3888.       of "end critical section" calls
  3889.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  3890.       and increment by hand.
  3891. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  3892. --------W-2F1682-----------------------------
  3893. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  3894.     AX = 1682h
  3895. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  3896.       and decrement by hand, taking care not to decrement InDOS flag
  3897.       through zero
  3898. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  3899. --------W-2F1683-----------------------------
  3900. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  3901.     AX = 1683h
  3902. Return: BX = current virtual machine (VM) ID
  3903. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  3904.     VM IDs are reused when VMs are destroyed
  3905.     an ID of 0 will never be returned
  3906. SeeAlso: AX=1684h,AX=1685h,AX=168Bh
  3907. --------W-2F1684-----------------------------
  3908. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  3909.     AX = 1684h
  3910.     BX = virtual device (VxD) ID (see below)
  3911.     ES:DI = 0000h:0000h
  3912. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3913. Note:    some Windows enhanced-mode virtual devices provide services that
  3914.       applications can access.  For example, the Virtual Display Device
  3915.       (VDD) provides an API used in turn by WINOLDAP.
  3916. SeeAlso: AX=1683h
  3917.  
  3918. Values for VxD ID:
  3919.  01h    VMM        Virtual Machine Manager
  3920.  02h    Debug
  3921.  03h    VPICD        Virtual Prog. Interrupt Controller (PIC) Device
  3922.  04h    VDMAD        Virtual Direct Memory Access (DMA) Device
  3923.  05h    VTD        Virtual Timer Device
  3924.  06h    V86MMGR        Virtual 8086 Mode Device
  3925.  07h    PAGESWAP    Paging Device
  3926.  08h    Parity
  3927.  09h    Reboot
  3928.  0Ah    VDD        Virtual Display Device (GRABBER)
  3929.  0Bh    VSD        Virtual Sound Device
  3930.  0Ch    VMD        Virtual Mouse Device
  3931.  0Dh    VKD        Virtual Keyboard Device
  3932.  0Eh    VCD        Virtual COMM Device
  3933.  0Fh    VPD        Virtual Printer Device
  3934.  10h    VHD        Virtual Hard Disk Device (BlockDev in Windows3.1)
  3935.  11h    VMCPD
  3936.  12h    EBIOS        Reserve EBIOS page (e.g., on PS/2)
  3937.  13h    BIOSXLAT    Map ROM BIOS API between prot & V86 mode
  3938.  14h    VNETBIOS    Virtual NetBIOS Device
  3939.  15h    DOSMGR
  3940.  16h    WINLOAD
  3941.  17h    SHELL
  3942.  18h    VMPoll
  3943.  19h    VPROD
  3944.  1Ah    DOSNET        assures network integrity across VMs
  3945.  1Bh    VFD        Virtual Floppy Device
  3946.  1Ch    VDD2        Secondary display adapter
  3947.  1Dh    WINDEBUG
  3948.  1Eh    TSRLoad        TSR instance utility
  3949.  1Fh    BiosHook    BIOS interrupt hooker VxD
  3950.  20h    Int13
  3951.  21h    PageFile    Paging File device
  3952.  22h    SCSI
  3953.  23h    MCA_POS
  3954.  24h    SCSIFD        SCSI FastDisk device
  3955.  25h    VPEND        Pen device
  3956.  26h    APM        Advanced Power Management
  3957. 444h    VADMAD        Autoinitialize DMA (Windows 3.0)
  3958. Note:    The high bit of the VxD ID is reserved for future use. The
  3959.     next 10 bits are the OEM # which is assigned by Microsoft. The
  3960.     low 5 bits are the device number. 
  3961.  
  3962. Call VTD.386 entry point with:
  3963.     AX = 0000h get VTD version number
  3964.         Return: AH = major version
  3965.             AL = minor version
  3966.     AX = 0100h get current clock tick time
  3967.         Return: EDX:EAX = clock tick time in 840ns units since Windows was
  3968.                 started
  3969.     AX = 0101h get current system time in milliseconds
  3970.         Return: EAX = time in milliseconds that Windows has been running
  3971.     AX = 0102h get current virtual machine time
  3972.         Return: EAX = cumulative amount of time the virtual machine has
  3973.             been active, in milliseconds
  3974. Note:    should only be called directly when TOOLHELP.DLL TimerCount() cannot
  3975.       be called
  3976.  
  3977. Call VADMAD entry point with:
  3978.     DX = operation
  3979.         0000h set VADMAD mode
  3980.             AX = desired mode
  3981.         0001h set VADMAD channel
  3982.             AX = desired channel
  3983. Note:    after setting mode/channel, start the DMA operation with an OUT to
  3984.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  3985. --------W-2F1685-----------------------------
  3986. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  3987.     AX = 1685h
  3988.     BX = VM ID of virtual machine to switch to
  3989.     CX = flags
  3990.         bit 0 wait until interrupts enabled
  3991.         bit 1 wait until critical section unowned
  3992.         bits 2-15 reserved (zero)
  3993.     DX:SI = priority boost (see VMM.INC)
  3994.     ES:DI -> FAR procedure to callback
  3995. Return: CF set on error
  3996.         AX = error code
  3997.         01h invalid VM ID
  3998.         02h invalid priority boost
  3999.         03h invalid flags
  4000.     CF clear if successful
  4001.         event will be or has been called
  4002. Notes:    some DOS devices, such as networks, need to call functions in a
  4003.       specific VM. This call forces the appropriate VM to be installed.
  4004.     the callback procedure must preserve all registers and return with IRET
  4005. SeeAlso: AX=1683h,INT 15/AX=1117h
  4006. --------E-2F1686-----------------------------
  4007. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  4008.     AX = 1686h
  4009. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  4010.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  4011. SeeAlso: AX=1687h
  4012. --------E-2F1687-----------------------------
  4013. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  4014.     AX = 1687h
  4015. Return: AX = 0000h if installed
  4016.         BX = flags
  4017.         bit 0: 32-bit programs supported
  4018.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4019.         DH = DPMI major version
  4020.         DL = two-digit DPMI minor version
  4021.         SI = number of paragraphs of DOS extender private data
  4022.         ES:DI -> DPMI mode-switch entry point
  4023.     AX nonzero if not installed
  4024. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  4025. SeeAlso: INT 31/AX=0400h,INT 38/AH=10h
  4026.  
  4027. Call mode switch entry point with:
  4028.     AX = flags
  4029.         bit 0: set if 32-bit program
  4030.     ES = real mode segment of buffer for DPMI private data (ignored if
  4031.         SI was zero)
  4032. Return: CF set on error
  4033.         program still in real mode
  4034.         AX = error code (DPMI 1.0+)
  4035.            8011h unable to allocate all necessary descriptors
  4036.            8021h 32-bit program specified, but 16-bit DPMI host
  4037.     CF clear if successful
  4038.         CS = 16-bit selector corresponding to real-mode CS
  4039.         SS = selector corresponding to real-mode SS (64K limit)
  4040.         DS = selector corresponding to real-mode DS (64K limit)
  4041.         ES = selector to program's PSP (100h byte limit)
  4042.         FS = GS = 0
  4043.         high word of ESP = 0 if 32-bit program
  4044.         program now in protected mode
  4045. Note:    this entry point is only called for the initial switch to protected
  4046.       mode
  4047. --------W-2F1688-----------------------------
  4048. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET SELECTOR TO LDT
  4049.     AX = 1688h
  4050. Return: AX = status??? (0000h for 386MAX)
  4051.     BX = selector for ???
  4052. --------W-2F1689-----------------------------
  4053. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  4054.     AX = 1689h
  4055.     ???
  4056. Return: ???
  4057. SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28
  4058. --------E-2F168A-----------------------------
  4059. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  4060.     AX = 168Ah
  4061.     DS:(E)SI = selector:offset of ASCIZ vendor name
  4062. Return: AL = status
  4063.         00h successful
  4064.            ES:(E)DI -> extended API entry point
  4065.         8Ah unsuccessful
  4066. Notes:    the vendor name is used to determine which entry point to return; it is
  4067.       case-sensitive
  4068.     available in protected mode only
  4069.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  4070.     this call is present but not documented for DPMI 0.9
  4071. SeeAlso: INT 31/AX=0A00h
  4072.  
  4073. Vendor names:
  4074.  "MS-DOS"    ??? and 386MAX v6.00+
  4075.  "386MAX"    386MAX v6.00+
  4076. --------W-2F168B-----------------------------
  4077. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  4078.     AX = 168Bh
  4079.     BX = virtual machine ID (see AX=1683h)
  4080. Return: AL = 00h if focus set to specified VM
  4081. Note:    documented on the Microsoft Developer's Network CD-ROM
  4082. SeeAlso: AX=1683h
  4083. --------W-2F168C-----------------------------
  4084. INT 2F - MS Windows 3.1 - RESTART COMMAND
  4085.     AX = 168Ch
  4086.     ???
  4087. Return: ???
  4088. Note:    WIN.COM executes specified application
  4089. --------W-2F1700-----------------------------
  4090. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  4091.     AX = 1700h
  4092. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  4093.     AX <> 1700h
  4094.         AL = WINOLDAP major version
  4095.         AH = WINOLDAP minor version
  4096. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  4097.       "old" (character-mode) application access to Dynamic Data Exchange,
  4098.       menus, and the Windows clipboard.
  4099. Note:    this installation check DOES NOT follow the format used by other
  4100.       software of returning AL=FFh
  4101. Index:    installation check;WINOLDAP
  4102. --------W-2F1701-----------------------------
  4103. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  4104.     AX = 1701h
  4105. Return:    AX <> 0     success
  4106.     AX = 0     clipboard is already open
  4107. --------W-2F1702-----------------------------
  4108. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  4109.     AX = 1702h
  4110. Return: AX <> 0     clipboard has been emptied
  4111.     AX = 0     failure
  4112. --------W-2F1703-----------------------------
  4113. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  4114.     AX = 1703h
  4115.     DX = clipboard format supported by WinOldAp:
  4116.         01h text
  4117.         02h bitmap
  4118.         03h metafile picture
  4119.         04h SYLK
  4120.         05h DIF
  4121.         06h TIFF
  4122.         07h OEM text
  4123.         81h DSP text
  4124.         82h DSP bitmap
  4125.     ES:BX -> data (see below)
  4126.     SI:CX = size of data
  4127. Return: AX <> 0 data copied into the Clipboard
  4128.     AX = 0 failure
  4129.  
  4130. Format of bitmap:
  4131. Offset    Size    Description
  4132.  00h    WORD    type (0000h)
  4133.  02h    WORD    width of bitmap in pixels
  4134.  04h    WORD    height of bitmap in pixels
  4135.  06h    WORD    bytes per line
  4136.  08h    BYTE    number of color planes
  4137.  09h    BYTE    number of adjacent color bits in pixel
  4138.  0Ah    DWORD    pointer to start of data
  4139.  0Eh    WORD    width in 0.1mm units
  4140.  10h    WORD    height in 0.1mm units
  4141.  12h  N BYTEs    bitmap data
  4142.  
  4143. Format of metafile picture:
  4144. Offset    Size    Description
  4145.  00h    WORD    mapping mode
  4146.  02h    WORD    X extent
  4147.  04h    WORD    Y extent
  4148.  06h    WORD    picture data
  4149. --------W-2F1704-----------------------------
  4150. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  4151.     AX = 1704h
  4152.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  4153. Return:     DX:AX = size of data in bytes, including any headers
  4154. Failure: DX:AX = 0  no data in this format in the Clipboard
  4155. --------W-2F1705-----------------------------
  4156. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  4157.     AX = 1705h
  4158.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  4159.     ES:BX -> buffer
  4160. Return: AX <> 0     success
  4161.     AX = 0     error, or no data in this format in Clipboard
  4162. --------W-2F1708-----------------------------
  4163. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  4164.     AX = 1708h
  4165. Return: AX <> 0 success
  4166.     AX = 0 failure
  4167. --------W-2F1709-----------------------------
  4168. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  4169.     AX = 1709h
  4170.     SI:CX = desired size in bytes
  4171. Return: DX:AX = number of bytes in largest block of free memory
  4172. Note:    WinOldAp is responsible for including the size of any headers
  4173. --------W-2F170A-----------------------------
  4174. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  4175.     AX = 170Ah
  4176.     DX = GDI information index
  4177.         00h device driver version
  4178.         02h device classification
  4179.         04h width in mm
  4180.         06h height in mm
  4181.         08h width in pixels
  4182.         0Ah height in pixels
  4183.         0Ch bits per pixel
  4184.         0Eh number of bit planes
  4185.         10h number of brushes supported by device
  4186.         12h number of pens supported by device
  4187.         14h number of markers supported by device
  4188.         16h number of fonts supported by device
  4189.         18h number of colors
  4190.         1Ah size required for device descriptor
  4191.         1Ch curve capabilities
  4192.         1Eh line capabilities
  4193.         20h polygon capabilities
  4194.         22h text capabilities
  4195.         24h clipping capabilities
  4196.         26h bitblt capabilities
  4197.         28h X aspect
  4198.         2Ah Y aspect
  4199.         2Ch length of hypotenuse of aspect
  4200.         58h logical pixels per inch of width
  4201.         5Ah logical pixels per inch of height
  4202. Return:     AX = integer value of the desired item (see below)
  4203. Note:  This function returns the device-capability bits for the given display
  4204.  
  4205. Values for device classification:
  4206.  00h vector plotter
  4207.  01h raster display
  4208.  02h raster printer
  4209.  03h raster camera
  4210.  04h character-stream, PLP
  4211.  05h Metafile, VDM
  4212.  06h display-file
  4213.  
  4214. Bitfields for curve capabilities:
  4215.  bit 0    circles
  4216.  bit 1    pie wedges
  4217.  bit 2    chord arcs
  4218.  bit 3    ellipses
  4219.  bit 4    wide lines
  4220.  bit 5    styled lines
  4221.  bit 6    wide styled lines
  4222.  bit 7    interiors
  4223.  
  4224. Bitfields for line capabilities:
  4225.  bit 1    polylines
  4226.  bit 2    markers
  4227.  bit 3    polymarkers
  4228.  bit 4    wide lines
  4229.  bit 5    styled lines
  4230.  bit 6    wide styled lines
  4231.  bit 7    interiors
  4232.  
  4233. Bitfields for polygon capabilities:
  4234.  bit 0    polygons
  4235.  bit 1    rectangles
  4236.  bit 2    trapezoids
  4237.  bit 3    scanlines
  4238.  bit 4    wide borders
  4239.  bit 5    styled borders
  4240.  bit 6    wide styled borders
  4241.  bit 7    interiors
  4242.  
  4243. Bitfields for text capabilities:
  4244.  bit 0    output precision character
  4245.  bit 1    output precision stroke
  4246.  bit 2    clippping precision stroke
  4247.  bit 3    90-degree character rotation
  4248.  bit 4    arbitrary character rotation
  4249.  bit 5    independent X and Y scaling
  4250.  bit 6    double-size
  4251.  bit 7    integer scaling
  4252.  bit 8    continuous scaling
  4253.  bit 9    bold
  4254.  bit 10    italic
  4255.  bit 11    underline
  4256.  bit 12    strikeout
  4257.  bit 13    raster fonts
  4258.  bit 14    vector fonts
  4259.  bit 15    reserved
  4260.  
  4261. Values for clipping capabilities:
  4262.  00h none
  4263.  01h clipping to rectangles
  4264.  
  4265. Bitfields for raster capabilities:
  4266.  bit 0    simple bitBLT
  4267.  bit 1    device requires banding support
  4268.  bit 2    device requires scaling support
  4269.  bit 3    supports >64K bitmap
  4270. ----------2F18-------------------------------
  4271. INT 2F U - MS-Manager
  4272.     AH = 18h
  4273.     ???
  4274. Return: ???
  4275. --------l-2F1900-----------------------------
  4276. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  4277.     AX = 1900h
  4278. Return: AL = 00h  not installed
  4279.          FFh  installed
  4280. --------l-2F1901BL00-------------------------
  4281. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  4282.     AX = 1901h
  4283.     BL = 00h if SHELLC transient
  4284.          01h if SHELLC resident
  4285.     DS:DX -> far call entry point for resident SHELLC.EXE
  4286. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  4287. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  4288. --------l-2F1902-----------------------------
  4289. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  4290.     AX = 1902h
  4291.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  4292.          final filename element uppercased
  4293.     DS:DX -> buffer for results
  4294. Return: AL = 00h  failed, either
  4295.           (a) final filename element quoted at ES:DI does not match
  4296.               identity of shell batch file quoted as parameter of most
  4297.               recent call of SHELLB command, or
  4298.           (b) no more Program Start Commands available.
  4299.     AL= FFh     success, then:
  4300.         memory at DS:[DX+1] onwards filled as:
  4301.         DX+1:    BYTE    count of bytes of PSC
  4302.         DX+2: N BYTEs    Program Start Command text
  4303.             BYTE    0Dh terminator 
  4304. Explanation: COMMAND.COM executes the result of this call in preference to 
  4305.     reading a command from a batch file. Thus the batch file does not
  4306.     advance in execution for so long as SHELLB provides PSCs from its
  4307.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  4308.     menu interface. The final PSC of a sequence is finished with a 
  4309.     GOTO COMMON, which causes a loop back in the batch file which called
  4310.     SHELLC so as to execute SHELLC again. The check on batch file name
  4311.     permits PSCs to CALL nested batch files while PSCs are still stacked
  4312.     up for subsequent execution.
  4313. --------l-2F1903-----------------------------
  4314. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  4315.     AX = 1903h
  4316.     ES:DI -> ASCIZ batch file name as for AX=1902h
  4317. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  4318.     AL = 00h if it does not
  4319. --------l-2F1904-----------------------------
  4320. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  4321.     AX = 1904h
  4322. Return: ES:DI -> name of current shell batch file:
  4323.         WORD    number of bytes of name following
  4324.         BYTEs    (8 max) uppercase name of shell batch file
  4325. --------V-2F1A00-----------------------------
  4326. INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK
  4327.     AX = 1A00h
  4328. Return: AL = FFh if installed
  4329. Notes:    AVATAR.SYS also responds to this call
  4330.     documented for DOS 5+, but undocumented for DOS 4.x
  4331. --------V-2F1A00BX414E-----------------------
  4332. INT 2F - ANSIPLUS.SYS - INSTALLATION CHECK
  4333.     AX = 1A00h
  4334.     BX = 414Eh ('AN')
  4335.     CX = 5349h ('SI')
  4336.     DX = 2B2Bh ('++')
  4337. Return: AL = FFh if installed
  4338.         CF clear
  4339.         ES:BX -> INT 29 entry point
  4340. Program: ANSIPLUS.SYS is a CON device driver by Kristofer Sweger which
  4341.       replaces the normal ANSI.SYS is a more powerful version with many
  4342.       additional features
  4343. Note:    ANSIPLUS also identifies itself as ANSI.SYS if BX,CX, or DX differ
  4344.       from the magic values above
  4345. --------V-2F1A00BX4156-----------------------
  4346. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  4347.     AX = 1A00h
  4348.     BX = 4156h ('AV')
  4349.     CX = 4154h ('AT')
  4350.     DX = 4152h ('AR')
  4351. Return: AL = FFh if installed
  4352.         CF clear
  4353.         BX = AVATAR protocol level supported
  4354.         CX = driver type
  4355.         0000h AVATAR.SYS
  4356.         4456h DVAVATAR.COM inside DESQview window
  4357.         DX = 0016h
  4358. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  4359.       interprets AVATAR command codes in the same way that ANSI interprets
  4360.       ANSI command codes
  4361. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  4362.       the magic values
  4363. --------V-2F1A01-----------------------------
  4364. INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  4365.     AX = 1A01h
  4366.     CL = function
  4367.         7Fh for GET
  4368.         5Fh for SET
  4369.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  4370. Return: CF set on error
  4371.         AX = error code (many non-standard)
  4372.     CF clear if successful
  4373.         AX destroyed
  4374. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  4375. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  4376. --------V-2F1A02-----------------------------
  4377. INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  4378.     AX = 1A02h
  4379.     DS:DX -> parameter block (see below)
  4380. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  4381. SeeAlso: AX=1A01h
  4382.  
  4383. Format of parameter block:
  4384. Offset    Size    Description
  4385.  00h    BYTE    subfunction
  4386.         00h set/reset interlock
  4387.         01h get /L flag
  4388.  01h    BYTE    interlock state
  4389.         00h=reset, 01h=set
  4390.           This interlock prevents some of the ANSI.SYS post-processing
  4391.           in its hook onto INT 10, AH=00h mode set
  4392.  02h    BYTE    (returned)
  4393.         00h if /L not in effect
  4394.         01h if /L in effect
  4395. --------V-2F1A21-----------------------------
  4396. INT 2F - AVATAR.SYS - SET DRIVER STATE
  4397.     AX = 1A21h (AL='!')
  4398.     DS:SI -> command string with one or more state characters
  4399.     CX = length of command string
  4400. Return: CF set on error (invalid subfunction)
  4401.     CF clear if successful
  4402. Note:    the characters in the state string are interpreted left to right, and
  4403.       need not be in any particular order
  4404. SeeAlso: AX=1A3Fh
  4405.  
  4406. Values of state characters:
  4407.  'a'    activate driver
  4408.  'd'    disable driver
  4409.  'f'    use fast screen output
  4410.  'g'    always convert gray keys (+ and -) to function keys
  4411.  'G'    never convert gray keys
  4412.  'l'    convert gray keys only when ScrollLock active
  4413.  's'    use slow screen output
  4414.  't'    Tandy 1000 keyboard (not yet implemented)
  4415. --------V-2F1A3C-----------------------------
  4416. INT 2F U - AVATAR.SYS v0.11 - ???
  4417.     AX = 1A3Ch
  4418.     ???
  4419. Return: CX = 0000h
  4420. --------V-2F1A3E-----------------------------
  4421. INT 2F U - AVATAR.SYS v0.11 - ???
  4422.     AX = 1A3Eh
  4423.     CL = ???
  4424.     CH = ???
  4425.     DL = ???
  4426.     DH = ???
  4427. Return: CL = ???
  4428.     CH = ???
  4429.     DL = ???
  4430.     DH = ???
  4431. --------V-2F1A3F-----------------------------
  4432. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  4433.     AX = 1A3Fh (AL='?')
  4434.     ES:DI -> buffer
  4435.     CX = length of buffer in bytes
  4436. Return: CF clear
  4437.     CX = actual size of returned info
  4438. Note:    the returned information consists of multiple letters whose meanings
  4439.       are described under AX=1A21h
  4440. SeeAlso: AX=1A21h
  4441. --------S-2F1A42BX4156-----------------------
  4442. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  4443.     AX = 1A42h
  4444.     BX = 4156h ('AV')
  4445.     ES:DI -> FAR handler for serial port using IRQ3
  4446.     DS = data segment needed by handler
  4447. Return: AX = 1A42h if ASD not installed
  4448.        = 0000h if no more room
  4449.        else handle to use when uninstalling
  4450. Notes:    the handler need not save/restore registers or signal EOI to the
  4451.       interrupt controller
  4452.     the handler should return AX=0000h if the interrupt was meant for it,
  4453.       and either leave AX unchanged or return a non-zero value otherwise
  4454.     the most recently installed handler will be called first, continuing
  4455.       to earlier handlers until one returns AX=0000h
  4456. SeeAlso: AX=1A43h,AX=1A62h
  4457. --------S-2F1A43BX4156-----------------------
  4458. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  4459.     AX = 1A43h
  4460.     BX = 4156h ('AV')
  4461.     ES:DI -> FAR handler for serial port using IRQ4
  4462.     DS = data segment needed by handler
  4463. Return: AX = 1A43h if ASD not installed
  4464.        = 0000h if no more room
  4465.        else handle to use when uninstalling
  4466. Notes:    (see AX=1A42h)
  4467. SeeAlso: AX=1A42h,AX=1A63h
  4468. --------V-2F1A44BX4156-----------------------
  4469. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  4470.     AX = 1A44h
  4471.     BX = 4156h ('AV')
  4472. Return: AX = 0000h
  4473.     DS = data segment
  4474.     CX = size of data segment
  4475. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  4476.       process under a multitasker hooks this function and provides a
  4477.       separate data segment, AVATAR.SYS becomes fully reentrant.
  4478. SeeAlso: AX=1A21h,AX=1A3Fh
  4479. --------V-2F1A52-----------------------------
  4480. INT 2F U - AVATAR.SYS v0.11 - GET ???
  4481.     AX = 1A52h
  4482.     CX = size of buffer
  4483.     ES:DI -> buffer
  4484. Return: ??? copied into user buffer
  4485. Note:    the maximum size of the data which may be copied is returned by
  4486.       AX=1A72h
  4487. SeeAlso: AX=1A72h
  4488. --------V-2F1A53-----------------------------
  4489. INT 2F U - AVATAR.SYS v0.11 - ???
  4490.     AX = 1A53h
  4491.     CL = ??? (00h-05h)
  4492.     ???
  4493. Return: ???
  4494. --------S-2F1A62BX4156-----------------------
  4495. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  4496.     AX = 1A62h
  4497.     BX = 4156h ('AV')
  4498.     CX = handle for IRQ routine returned by AX=1A42h
  4499. SeeAlso: AX=1A42h,AX=1A63h
  4500. --------S-2F1A63BX4156-----------------------
  4501. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  4502.     AX = 1A63h
  4503.     BX = 4156h ('AV')
  4504.     CX = handle for IRQ routine returned by AX=1A43h
  4505. SeeAlso: AX=1A43h,AX=1A62h
  4506. --------V-2F1A72-----------------------------
  4507. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  4508.     AX = 1A72h
  4509. Return: CX = maximum size of ???
  4510. SeeAlso: AX=1A52h
  4511. --------V-2F1A7B-----------------------------
  4512. INT 2F U - AVATAR.SYS v0.11 - ???
  4513.     AX = 1A7Bh
  4514. Return: AX = 0000h
  4515.     CX = 0000h
  4516. --------V-2F1A7D-----------------------------
  4517. INT 2F U - AVATAR.SYS v0.11 - ???
  4518.     AX = 1A7Dh
  4519. Return: AX = ???
  4520. --------V-2F1AADDX0000-----------------------
  4521. INT 2F U - AVATAR.SYS v0.11 - ???
  4522.     AX = 1AADh
  4523.     DX = 0000h
  4524.     CX = subfunction (00h-0Ch)
  4525.     ???
  4526. Return: AX = 0000h if DX was nonzero
  4527.     ???
  4528. --------m-2F1B00-----------------------------
  4529. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  4530.     AX = 1B00h
  4531. Return: AL = FFh if installed
  4532. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  4533.     This extension hooks onto INT 67/AH=58h and returns from that call data
  4534.       which excludes the physical pages being used by DOS.
  4535. SeeAlso: AH=1Bh"FRAME INFO"
  4536. --------m-2F1B-------------------------------
  4537. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  4538.     AH = 1Bh
  4539.     AL <> 00h
  4540.     DI = hidden physical page number
  4541. Return: AX = FFFFh if failed (no such hidden page)
  4542.     AX = 0000h if OK, then
  4543.          ES = segment of page frame
  4544.          DI = physical page number
  4545. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  4546.     FASTOPEN makes this call with AL = FFh
  4547. SeeAlso: AX=1B00h
  4548. --------V-2F2300-----------------------------
  4549. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  4550.     AX = 2300h
  4551. Return: AH = FFh
  4552. Note:    this installation check does not follow the usual format
  4553. SeeAlso: AH=23h
  4554. --------V-2F23-------------------------------
  4555. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  4556.     AH = 23h
  4557.     AL nonzero
  4558. Return: AH = FFh
  4559.     ES:BX -> graphics data
  4560. SeeAlso: AX=2300h
  4561. --------T-2F2700-----------------------------
  4562. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  4563.     AX = 2700h
  4564. Return: AL = 00h not installed
  4565.        = FFh installed
  4566. --------T-2F2701-----------------------------
  4567. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  4568.     AX = 2701h
  4569. Return: AX = maximum simultaneous tasks
  4570.     BX = index into TASK_IDS of current foreground task
  4571.     CX = currently-active tasks
  4572.     DX = version number (DR-DOS 6.0 = 0001h)
  4573.     ES:SI -> TASK_IDS
  4574.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  4575. Notes:    do not attempt to create a new task if CX == AX
  4576.     the task's index is its position on the task menu, while its ID is the
  4577.       position within the internal task name table
  4578. SeeAlso: AX=2714h,AX=2716h
  4579. --------T-2F2702-----------------------------
  4580. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  4581.     AX = 2702h
  4582. Return: DX = maximum pages INT 67/AH=42h will report available
  4583. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  4584.       amount which is reported as being available at a given time
  4585. SeeAlso: AX=2703h,INT 67/AH=42h
  4586. --------T-2F2703-----------------------------
  4587. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  4588.     AX = 2703h
  4589.     DX = maximum pages INT 67/AH=42h should report available
  4590. Return: DX = new maximum for reporting
  4591. SeeAlso: AX=2702h,INT 67/AH=42h
  4592. --------T-2F2704-----------------------------
  4593. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  4594.     AX = 2704h
  4595.     DL = subfunction
  4596.         00h unregister task manager
  4597.         01h register task manager
  4598. Return: DL = status
  4599.         00h registered
  4600.         01h unregistered
  4601. Notes:    a task manager replaces TaskMAX's menu system with its own user
  4602.       interface; while one is registered, the TaskMAX hotkeys and
  4603.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  4604.     unregister the task manager before terminating it
  4605. SeeAlso: AX=2705h
  4606. --------T-2F2705-----------------------------
  4607. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  4608.     AX = 2705h
  4609.     DL = subfunction
  4610.         00h disable keystrokes for switching to next/prev/specified task
  4611.         01h enable
  4612. Return: nothing
  4613. Note:    should only be called by a registered task manager (see AX=2704h)
  4614. SeeAlso: AX=2704h,AX=2706h
  4615. --------T-2F2706-----------------------------
  4616. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  4617.     AX = 2706h
  4618.     DX = task index (see AX=2701h) of task to be activated
  4619. Return: DX = task index of previously-active task
  4620. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  4621. --------T-2F2707-----------------------------
  4622. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  4623.     AX = 2707h
  4624.     DS:DX -> ASCIZ pathname of executable
  4625.     ES:BX -> parameter block (see below)
  4626.     CX = number of ticks before automatic return to task manager
  4627.         (0000h = run until termination or explicitly switched)
  4628. Return: DX = new task's task index (FFFFh if task terminated)
  4629. SeeAlso: AX=2706h,AX=2708h
  4630.  
  4631. Format of parameter block:
  4632. Offset    Size    Description
  4633.  00h    WORD    reserved, should be 0000h
  4634.  02h    DWORD    pointer to command tail to be copied into child's PSP
  4635.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  4636.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  4637. --------T-2F2708-----------------------------
  4638. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  4639.     AX = 2708h
  4640.     DX = task index
  4641. Return: DX = FFFFh (task deleted)
  4642. Notes:    this call should only be used for abnormal task termination, after
  4643.       first checking for open files with AX=270Ch; should not be used
  4644.       with programs that allocate EMS or XMS memory
  4645.     switches to specified task first
  4646. SeeAlso: AX=2707h
  4647. --------T-2F2709-----------------------------
  4648. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  4649.     AX = 2709h
  4650.     DX = task index
  4651.     DS:SI -> 8-byte name (8 NULs = remove name)
  4652. Return: AL = task flags
  4653.         00h ID unused or task terminated
  4654.         01h ID in use, task name table entry valid
  4655.         81h ID in use, task name fixed
  4656.     BX = task ID
  4657.     ES:DI -> name in task name table (see AX=2701h)
  4658. Note:    the task retains the given name until it terminates or the name is
  4659.       removed by specifying a name of 8 NULs.
  4660. SeeAlso: AX=2701h,AX=2707h
  4661. --------T-2F270A-----------------------------
  4662. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  4663.     AX = 270Ah
  4664.     DX = task index
  4665. Return: DX = task ID (FFFFh if index invalid)
  4666. Note:    task IDs stay constant, while indexes can change when other tasks are
  4667.       deleted
  4668. SeeAlso: AX=2701h,AX=270Bh
  4669. --------T-2F270B-----------------------------
  4670. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  4671.     AX = 270Bh
  4672.     DX = task ID
  4673. Return: DX = task index (FFFFh if task not active)
  4674. SeeAlso: AX=270Ah
  4675. --------T-2F270C-----------------------------
  4676. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  4677.     AX = 270Ch
  4678.     DX = task index
  4679. Return: AX = number of files currently open for specified task
  4680. SeeAlso: AX=2708h
  4681. --------T-2F270D-----------------------------
  4682. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  4683.     AX = 270Dh
  4684.     DX = task index
  4685. Return: DX = status
  4686.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  4687.         0001h if not in root shell for task
  4688. Note:    TaskMAX will return 0001h if the specified task has spawned another
  4689.       command interpreter with AX=2707h
  4690. SeeAlso: AX=2707h,AX=270Ch
  4691. --------T-2F270E-----------------------------
  4692. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  4693.     AX = 270Eh
  4694.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4695.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  4696. Return: ES:DI -> current lead-in string
  4697. Note:    the specified sequence of keystrokes is sent to the application before
  4698.       every line of a text-mode spreadsheet paste
  4699. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  4700. --------T-2F270F-----------------------------
  4701. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  4702.     AX = 270Fh
  4703.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4704.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  4705. Return: ES:DI -> current lead-in string
  4706. Note:    the specified sequence of keystrokes is sent to the application before
  4707.       every number in a numeric-mode spreadsheet paste
  4708. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  4709. --------T-2F2710-----------------------------
  4710. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  4711.     AX = 2710h
  4712.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4713.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  4714. Return: ES:DI -> current lead-in string
  4715. Note:    the specified sequence of keystrokes is sent to the application after
  4716.       every line of a spreadsheet paste operation
  4717. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  4718. --------T-2F2711-----------------------------
  4719. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  4720.     AX = 2711h
  4721.     DX = ASCII code for separator (FFFFh to get current)
  4722. Return: DL = current separator character
  4723. SeeAlso: AX=270Fh
  4724. --------T-2F2712-----------------------------
  4725. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  4726.     AX = 2712h
  4727.     DX = task index
  4728. --------T-2F2713-----------------------------
  4729. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  4730.     AX = 2713h
  4731.     DX = task index
  4732.     CX = past mode
  4733.         0000h alphanumeric
  4734.         0001h numeric
  4735.         0002h text
  4736. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  4737. --------T-2F2714-----------------------------
  4738. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  4739.     AX = 2714h
  4740. Return: CX = total KB of swap space
  4741.     DX = available KB of swap space
  4742. SeeAlso: AX=2701h
  4743. --------T-2F2715-----------------------------
  4744. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  4745.     AX = 2715h
  4746. Return: only after calling task is again selected
  4747. SeeAlso: AX=2706h
  4748. --------T-2F2716-----------------------------
  4749. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  4750.     AX = 2716h
  4751. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  4752.         CX = bytes in paste buffer
  4753.         DX = current generation number (updated after every copy operation)
  4754. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  4755. --------T-2F2717-----------------------------
  4756. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  4757.     AX = 2717h
  4758.     CX = bytes in destination buffer
  4759.     ES:DI -> destination buffer
  4760. Return: AX = 0000h if function supported
  4761.         CX = bytes actually copied (FFFFh if buffer too small)
  4762.         DX = current generation number for paste buffer
  4763. Note:    the destination buffer may be too small if another task adds more data
  4764.       to the paste buffer after the AX=2716h call but before this call
  4765. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  4766. --------T-2F2718-----------------------------
  4767. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  4768.     AX = 2718h
  4769.     CX = bytes in source buffer
  4770.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  4771. Return: AX = 0000h if function supported
  4772.         CX = bytes actually copied
  4773.         DX = current generation number for paste buffer
  4774. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  4775. --------F-2F2A-------------------------------
  4776. INT 2F - Gammafax DOS Dispatcher INTERFACE
  4777.     AH = 2Ah
  4778. Note:    details not available at this time
  4779. SeeAlso: AX=8000h"FaxBIOS",AX=C000h"MTEZ",AX=CB00h,AX=CBDDh,INT 66"BitFax"
  4780. --------t-2F3900-----------------------------
  4781. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  4782.     AX = 3900h
  4783. Return: AL = status
  4784.         00h not installed
  4785.         FFh one or more TSRs using this interface is installed
  4786. Note:    this function is provided to that the multiplex number will appear used
  4787.       to other programs
  4788. SeeAlso: AH=39h/BL=00h
  4789. --------t-2F39--BL00-------------------------
  4790. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  4791.     AH = 39h
  4792.     BL = 00h
  4793.     AL = TSR ID number (01h-FFh, currently only 01h-0Eh used) (see below)
  4794. Return: AL = status
  4795.         00h not installed
  4796.         FFh installed
  4797.         DX = segment address of resident module
  4798. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  4799.       resident module is installed by allocating a block of upper memory,
  4800.       setting its owner ID to 0008h (DOS data), and filling the MCB name
  4801.       field with the TSR's name.
  4802. SeeAlso: AX=3900h,AH=39h/BL=01h
  4803.  
  4804. Values for TSR ID number:
  4805.  01h TSR Windows
  4806.  02h NOBUSY
  4807.  03h CD STACK
  4808.  04h DISK WATCH
  4809.  05h PUSHBP
  4810.  06h ALIAS
  4811.  07h KEYMACRO
  4812.  08h SLOWDOWN
  4813.  09h ANSIGRAB
  4814.  0Ah TEE
  4815.  0Bh FASTMOUS
  4816.  0Ch EXTWILD
  4817.  0Dh BREAKOUT
  4818.  0Eh STOPDISK
  4819.  
  4820. Format of TSR modules:
  4821. Offset    Size    Description
  4822.  00h  4 BYTEs    signature "FTSR"
  4823.  04h    WORD    segment address of this module
  4824.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  4825.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  4826.         (usually only a PSP if file access is required)
  4827.      5N BYTEs    interrupt list (see below)
  4828.     BYTE    FFh terminator
  4829.  
  4830. Format of interrupt list entry:
  4831. Offset    Size    Description
  4832.  00h    BYTE    interrupt number (00h-FEh)
  4833.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  4834.  03h    WORD    offset within segment of begin of interrupt handler code
  4835. --------t-2F39--BL01-------------------------
  4836. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  4837.     AH = 39h
  4838.     BL = 01h
  4839.     AL = TSR ID number (01h-FFh) (see AH=39h/BL=00h)
  4840. Return: AL = status
  4841.         00h not ready to be removed
  4842.         FFh resident module may be removed by deassigning the interrupts
  4843.         hooked by the TSR and deallocating the TSR's memory block
  4844.     AH,BX,CX,DX,ES may be destroyed
  4845. SeeAlso: AX=3900h,AH=39h/BL=00h
  4846. --------t-2F39-------------------------------
  4847. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  4848.     AH = 39h
  4849.     BL = function number (02h-FFh)
  4850.     AL = TSR ID number (01h-FFh)
  4851.     CX,DX,SI,DI,DS,ES may contain parameters
  4852. Return: as appropriate for the called function
  4853. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  4854. --------r-2F3901BL02-------------------------
  4855. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  4856.     AX = 3901h
  4857.     BL = 02h
  4858. Return: AX = error code (0000h if successful)
  4859. Notes:    opens the next TSR window on top of any others.     Only three
  4860.       TSR windows can be opened at any one time.  The three windows
  4861.       are all 40x11 characters, partly overlapping.
  4862. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  4863. --------r-2F3901BL03-------------------------
  4864. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  4865.     AX = 3901h
  4866.     BL = 03h
  4867. Return: AX = error code (0000h if successful)
  4868. Notes:    Hide any visible TSR windows from view.
  4869. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  4870. --------r-2F3901BL04-------------------------
  4871. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  4872.     AX = 3901h
  4873.     BL = 04h
  4874. Return: AX = error code (0000h if successful)
  4875. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  4876. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  4877. --------r-2F3901BL05-------------------------
  4878. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  4879.     AX = 3901h
  4880.     BL = 05h
  4881. Return: AX = error code (0000h if successful)
  4882. Notes:    Close the last opened TSR window.
  4883. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  4884. --------r-2F3901BL06-------------------------
  4885. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  4886.     AX = 3901h
  4887.     BL = 06h
  4888.     DS:SI -> title string
  4889. Return: AX = error code (0000h if successful)
  4890. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  4891. --------r-2F3901BL07-------------------------
  4892. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  4893.     AX = 3901h
  4894.     BL = 07h
  4895.     CH = Y coordinate (0-10)
  4896.     CL = X coordinate (0-39)
  4897. Return: AX = error code (0000h if successful)
  4898. Note:    the hardware cursor is always disabled when a TSR window is opened;
  4899.       this call only sets a text position
  4900. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  4901. --------r-2F3901BL08-------------------------
  4902. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  4903.     AX = 3901h
  4904.     BL = 08h
  4905.     DS:SI -> string
  4906. Return: AX = error code (0000h if successful)
  4907. Notes:    The text is not clipped.
  4908.     This routine understands Tab, NewLine and Carriage Return
  4909. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  4910. --------r-2F3901BL09-------------------------
  4911. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  4912.     AX = 3901h
  4913.     BL = 09h
  4914.     CL = scroll direction: 00h up, FFh down, 00h clear window
  4915. Return: AX = error code (0000h if successful)
  4916. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  4917. --------r-2F3901BL0A-------------------------
  4918. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  4919.     AX = 3901h
  4920.     BL = 0Ah
  4921.     DX = sound divisor, or 0 for silence.
  4922.          (divide 1843200 by required frequency to get value for DX)
  4923.     CL = sound length in 18.2 Hz clock ticks
  4924. Return: AX = error code (0000h if successful)
  4925. SeeAlso: AH=39h/BL=00h
  4926. --------r-2F3901BL0B-------------------------
  4927. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  4928.     AX = 3901h
  4929.     BL = 0Bh
  4930.     CL = number of users increment: +1 if adding a new user
  4931.                     -1 if removing a user
  4932. Return: AX = error code (0000h if successful)
  4933. Note:    the TSR windows resident module may only be removed when the internal
  4934.       user count is zero
  4935. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  4936. --------W-2F4000-----------------------------
  4937. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  4938.     AX = 4000h
  4939. Return: AL = 01h does not virtualize video access
  4940.          02h virtualizes the video when in text mode
  4941.          03h virtualizes the video when in text mode or single plane
  4942.          graphics modes
  4943.          04h virtualizes the video when in text mode, single plane
  4944.          graphics modes, and VGA multiplane modes
  4945.          FFh virtualizes the video fully
  4946. Note:    this function is used by display drivers to find out what capabilities
  4947.       exist for the VDD driver and also trigger then VDD driver to call
  4948.       functions 4005h and 4006h.  This function also gives the Video Driver
  4949.       hardware access to the video registers.
  4950. --------O-2F4001-----------------------------
  4951. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  4952.     AX = 4001h
  4953. Note:    called by OS/2 when the DOS box is about to be placed in the background
  4954.       and the video driver should save any necessary state
  4955. SeeAlso: AX=4002h,AX=4005h
  4956. --------O-2F4002-----------------------------
  4957. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  4958.     AX = 4002h
  4959. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  4960.       and the video driver should restore the previously-saved state
  4961. SeeAlso: AX=4001h,AX=4006h
  4962. --------W-2F4003-----------------------------
  4963. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  4964.     AX = 4003h
  4965. Note:    This critical section must be exited within 1 second.
  4966. SeeAlso: AX=4004h
  4967. --------W-2F4004-----------------------------
  4968. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  4969.     AX = 4004h
  4970. SeeAlso: AX=4003h
  4971. --------W-2F4005-----------------------------
  4972. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  4973.     AX = 4005h
  4974. Note:    called by Windows when the DOS box is about to be placed in the
  4975.       background and the video driver should save any necessary state
  4976.       information
  4977. SeeAlso: AX=4001h,AX=4006h
  4978. --------W-2F4006-----------------------------
  4979. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  4980.     AX = 4006h
  4981. Note:    called by Windows when the DOS box is about to be placed in the
  4982.       foreground and the video driver should restore any necessary state
  4983.       information
  4984. SeeAlso: AX=4002h,AX=4005h
  4985. --------W-2F4007-----------------------------
  4986. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  4987.     AX = 4007h
  4988. Note:    used by Windows Standard mode
  4989. --------E-2F4040-----------------------------
  4990. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  4991.     AX = 4040h
  4992. Return: BX:CX -> ???
  4993. --------N-2F4100-----------------------------
  4994. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  4995.     AX = 4100h
  4996. Return: CF clear if successful
  4997.         AL = FFh
  4998.     CF set on error
  4999.         AX = ???
  5000. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  5001.     LAN Manager enhanced mode adds features beyond the standard redirector
  5002.       file/printer services
  5003. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  5004. --------N-2F4103-----------------------------
  5005. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5006.     AX = 4103h
  5007. Return: ???
  5008. SeeAlso: AX=4100h,AX=4104h
  5009. --------N-2F4104-----------------------------
  5010. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5011.     AX = 4104h
  5012. Return: ???
  5013. SeeAlso: AX=4100h,AX=4103h
  5014. --------N-2F42-------------------------------
  5015. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  5016.     AH = 42h
  5017.     ???
  5018. Return: ???
  5019. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5020.       file/printer services
  5021. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  5022. --------m-2F4300-----------------------------
  5023. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - INSTALLATION CHECK
  5024.     AX = 4300h
  5025. Return: AL = 80h XMS driver installed
  5026.     AL <> 80h no driver
  5027. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  5028.       above 640K
  5029.     this installation check DOES NOT follow the format used by other
  5030.       software
  5031. SeeAlso: AX=4310h
  5032. Index:    installation check;XMS version 2+
  5033. --------m-2F4308-----------------------------
  5034. INT 2F U - HIMEM.SYS v2.77+ - GET A20 HANDLER NUMBER
  5035.     AX = 4308h
  5036. Return: AL = 43h if supported
  5037.         BL = A20 handler number (value of /MACHINE:nn switch)
  5038.         BH = AT A20 switch time (00h medium, 01h fast, 02h slow)
  5039. SeeAlso: AX=4330h
  5040. --------m-2F4310-----------------------------
  5041. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
  5042.     AX = 4310h
  5043. Return: ES:BX -> driver entry point
  5044. Note:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  5045. SeeAlso: AX=4300h
  5046.  
  5047. Perform a FAR call to the driver entry point with AH set to the function code
  5048.     AH    function
  5049.     00h  Get XMS version number
  5050.          Return: AX = XMS version (in BCD, AH=major, AL=minor)
  5051.              BX = internal revision number
  5052.              DX = 0001h if HMA (1M to 1M + 64K) exists
  5053.               0000h if HMA does not exist
  5054.     01h  Request High Memory Area (1M to 1M + 64K)
  5055.          DX = memory in bytes (for TSR or device drivers)
  5056.           FFFFh if application program
  5057.          Return: AX = 0001h success
  5058.             = 0000h failure
  5059.                BL = error code (80h,81h,90h,91h,92h) (see below)
  5060.     02h  Release High Memory Area
  5061.          Return: AX = 0001h success
  5062.             = 0000h failure
  5063.                BL = error code (80h,81h,90h,93h) (see below)
  5064.     03h  Global enable A20, for using the HMA
  5065.          Return: AX = 0001h success
  5066.             = 0000h failure
  5067.                BL = error code (80h,81h,82h) (see below)
  5068.     04h  Global disable A20
  5069.          Return: AX = 0001h success
  5070.             = 0000h failure
  5071.                BL = error code (80h,81h,82h,94h) (see below)
  5072.     05h  Local enable A20, for direct access to extended memory
  5073.          Return: AX = 0001h success
  5074.             = 0000h failure
  5075.                BL = error code (80h,81h,82h) (see below)
  5076.     06h  Local disable A20
  5077.          Return: AX = 0001h success
  5078.             = 0000h failure
  5079.                BL = error code (80h,81h,82h,94h) (see below)
  5080.     07h  Query A20 state
  5081.          Return: AX = 0001h enabled
  5082.             = 0000h disabled
  5083.              BL = error code (00h,80h,81h) (see below)
  5084.     08h  Query free extended memory, not counting HMA
  5085.          BL = 00h (some implementations leave BL unchanged on success)
  5086.          Return: AX = size of largest extended memory block in K
  5087.              DX = total extended memory in K
  5088.              BL = error code (00h,80h,81h,A0h) (see below)
  5089.     09h  Allocate extended memory block
  5090.          DX = Kbytes needed
  5091.          Return: AX = 0001h success
  5092.                DX = handle for memory block
  5093.             = 0000h failure
  5094.                BL = error code (80h,81h,A0h) (see below)
  5095.     0Ah  Free extended memory block
  5096.          DX = handle of block to free
  5097.          Return: AX = 0001h success
  5098.             = 0000h failure
  5099.                BL = error code (80h,81h,A2h,ABh) (see below)
  5100.     0Bh  Move extended memory block
  5101.          DS:SI -> EMM structure (see below)
  5102.          Note: if either handle is 0000h, the corresponding offset is
  5103.            considered to be an absolute segment:offset address in
  5104.            directly addressable memory
  5105.          Return: AX = 0001h success
  5106.             = 0000h failure
  5107.                BL = error code (80h-82h,A3h-A9h) (see below)
  5108.     0Ch  Lock extended memory block
  5109.          DX = handle of block to lock
  5110.          Return: AX = 0001h success
  5111.                DX:BX = 32-bit linear address of locked block
  5112.             = 0000h failure
  5113.                BL = error code (80h,81h,A2h,ACh,ADh) (see below)
  5114.     0Dh  Unlock extended memory block
  5115.          DX = handle of block to unlock
  5116.          Return: AX = 0001h success
  5117.             = 0000h failure
  5118.                BL = error code (80h,81h,A2h,AAh) (see below)
  5119.     0Eh  Get handle information
  5120.          DX = handle for which to get info
  5121.          Return: AX = 0001h success
  5122.                BH = block's lock count
  5123.                BL = number of free handles left
  5124.                DX = block size in K
  5125.             = 0000h failure
  5126.                BL = error code (80h,81h,A2h) (see below)
  5127.     0Fh  Reallocate extended memory block
  5128.          DX = handle of block
  5129.          BX = new size of block in K
  5130.          Return: AX = 0001h success
  5131.             = 0000h failure
  5132.                BL = error code (80h,81h,A0h-A2h,ABh) (see below)
  5133.     10h  Request upper memory block (nonEMS memory above 640K)
  5134.          DX = size of block in paragraphs
  5135.          Return: AX = 0001h success
  5136.                BX = segment address of UMB
  5137.                DX = actual size of block
  5138.             = 0000h failure
  5139.                BL = error code (80h,B0h,B1h) (see below)
  5140.                DX = largest available block
  5141.     11h  Release upper memory block
  5142.          DX = segment address of UMB to release
  5143.          Return: AX = 0001h success
  5144.             = 0000h failure
  5145.                BL = error code (80h,B2h) (see below)
  5146.     12h  (XMS v3.0) Reallocate upper memory block
  5147.          DX = segment address of UMB to resize
  5148.          BX = new size of block in paragraphs
  5149.          Return: AX = 0001h success
  5150.             = 0000h failure
  5151.                BL = error code (80h,B0h,B2h) (see below)
  5152.     34h  (QEMM 5.11 only, undocumented) ???
  5153.     44h  (QEMM 5.11 only, undocumented) ???
  5154.     88h  (XMS v3.0) Query free extended memory
  5155.          Return: EAX = largest block of extended memory, in K
  5156.              BL = status
  5157.              00h success
  5158.              80h not implemented (i.e. on a 286 system)
  5159.              81h VDISK detected
  5160.              A0h all extended memory allocated
  5161.              ECX = physical address of highest byte of memory
  5162.                 (valid even on error codes 81h and A0h)
  5163.              EDX = total Kbytes of extended memory (0 if status A0h)
  5164.     89h  (XMS v3.0) Allocate any extended memory
  5165.          EDX = Kbytes needed
  5166.          Return: AX = 0001h success
  5167.                 DX = handle for allocated block (free with AH=0Ah)
  5168.             = 0000h failure
  5169.                 BL = status (80h,81h,A0h,A1h,A2h) (see below)
  5170.     8Eh  (XMS v3.0) Get extended EMB handle information
  5171.          DX = handle
  5172.          Return: AX = 0001h success
  5173.                 BH = block's lock count
  5174.                 CX = number of free handles left
  5175.                 EDX = block size in K
  5176.             = 0000h failure
  5177.                 BL = status (80h,81h,A2h) (see below)
  5178.     8Fh  (XMS v3.0) Reallocate any extended memory block
  5179.          DX = unlocked handle
  5180.          EBX = new size in K
  5181.          Return: AX = 0001h success
  5182.             = 0000h failure
  5183.                 BL = status (80h,81h,A0h-A2h,ABh) (see below)
  5184. Notes:    HIMEM.SYS requires at least 256 bytes free stack space
  5185.     the XMS driver need not implement functions 10h through 12h to be
  5186.       considered compliant with the standard
  5187. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  5188.       are called
  5189.  
  5190. Format of EMM structure:
  5191. Offset    Size    Description
  5192.  00h    DWORD    number of bytes to move (must be even)
  5193.  04h    WORD    source handle
  5194.  06h    DWORD    offset into source block
  5195.  0Ah    WORD    destination handle
  5196.  0Ch    DWORD    offset into destination block
  5197. Notes:    if source and destination overlap, only forward moves (source base
  5198.       less than destination base) are guaranteed to work properly
  5199.     if either handle is zero, the corresponding offset is interpreted
  5200.       as a real-mode address referring to memory directly addressable
  5201.       by the processor
  5202.  
  5203. Error codes returned in BL:
  5204.     00h successful
  5205.     80h function not implemented
  5206.     81h Vdisk was detected
  5207.     82h an A20 error occurred
  5208.     8Eh a general driver error
  5209.     8Fh unrecoverable driver error
  5210.     90h HMA does not exist
  5211.     91h HMA is already in use
  5212.     92h DX is less than the /HMAMIN= parameter
  5213.     93h HMA is not allocated
  5214.     94h A20 line still enabled
  5215.     A0h all extended memory is allocated
  5216.     A1h all available extended memory handles are allocated
  5217.     A2h invalid handle
  5218.     A3h source handle is invalid
  5219.     A4h source offset is invalid
  5220.     A5h destination handle is invalid
  5221.     A6h destination offset is invalid
  5222.     A7h length is invalid
  5223.     A8h move has an invalid overlap
  5224.     A9h parity error occurred
  5225.     AAh block is not locked
  5226.     ABh block is locked
  5227.     ACh block lock count overflowed
  5228.     ADh lock failed
  5229.     B0h only a smaller UMB is available
  5230.     B1h no UMB's are available
  5231.     B2h UMB segment number is invalid
  5232. ----------2F4320-----------------------------
  5233. INT 2F U - HIMEM.SYS - Mach 20 SUPPORT
  5234.     AX = 4320h
  5235.     ???
  5236. Return: ???
  5237. --------m-2F4330-----------------------------
  5238. INT 2F UC - HIMEM.SYS v2.77+ - GET EXTERNAL A20 HANDLER ADDRESS
  5239.     AX = 4330h
  5240. Return: AL = 80h if external A20 handler provided
  5241.         ES:BX -> external A20 handler
  5242.         CL = ???
  5243. Note:    HIMEM.SYS calls this function to allow an external program to provide
  5244.       an A20 handler (i.e. to support a machine not supported by HIMEM
  5245.       itself)
  5246.  
  5247. External A20 handler called with:
  5248.     AX = function
  5249.         0000h disable A20
  5250.         0001h enable A20
  5251.     Return: AX = status
  5252.             0000h failure
  5253.             0001h successful
  5254. SeeAlso: AX=4308h,AX=4310h
  5255. --------E-2F43E0-----------------------------
  5256. INT 2F - Novell DOS Protected Mode Services (DPMS) - INSTALLATION CHECK
  5257.     AX = 43E0h
  5258. Return: AX = 0000h if installed
  5259.         ES:BX -> registration structure (see below)
  5260. Note:    this specification is still in beta
  5261. SeeAlso: INT 2F/AX=1687h
  5262.  
  5263. Format of registration structure:
  5264. Offset    Size    Description
  5265.  00h    DWORD    real-mode API entry point
  5266.  04h    DWORD    16-bit protected-mode API entry point
  5267.  08h  8 BYTEs    reserved (0)
  5268.  10h  8 BYTEs    blank-padded server OEM name
  5269.  18h    WORD    flags
  5270.          bit 0: fast processor reset available (286 only)
  5271.         bits 1-15 reserved (undefined)
  5272.  1Ah  2 BYTEs    DPMS version (major,minor)
  5273.  1Ch    BYTE    CPU type (02h = 286, 03h = 386 or higher)
  5274.  
  5275. Call DPMS entry point with:
  5276.     AX = 0100h call protected-mode procedure
  5277.         CX = number of words of stack to copy
  5278.         ES:DI -> callup/down register structure (see below)
  5279.         Return: CF clear if successful
  5280.             CF set on error
  5281.                 AX = error code (see below)
  5282.     AX = 0101h call real-mode procedure (RETF return)
  5283.         CX = number of words of stack to copy
  5284.         ES:DI -> callup/down register structure (see below)
  5285.         Return: CF clear if successful
  5286.             CF set on error
  5287.                 AX = error code (see below)
  5288.     AX = 0102h call real-mode procedure (IRET return)
  5289.         CX = number of words of stack to copy
  5290.         ES:DI -> callup/down register structure (see below)
  5291.         Return: CF clear if successful
  5292.             CF set on error
  5293.                 AX = error code (see below)
  5294.     AX = 0103h call real-mode interrupt handler
  5295.         BL = interrupt number
  5296.         CX = number of words of stack to copy
  5297.         ES:DI -> callup/down register structure (see below)
  5298.         Return: CF clear if successful
  5299.             CF set on error
  5300.                 AX = error code (see below)
  5301.     AX = 0200h allocate descriptors
  5302.         CX = number of descriptors to allocate
  5303.         Return: CF clear if successful
  5304.                 AX = first descriptor allocated
  5305.             CF set on error
  5306.                 AX = error code (see below)
  5307.     AX = 0201h free a descriptor
  5308.         BX = descriptor
  5309.         Return: CF clear if successful
  5310.             CF set on error
  5311.                 AX = error code (see below)
  5312.     AX = 0202h create alias descriptor
  5313.         BX = descriptor
  5314.         Return: CF clear if successful
  5315.                 AX = alias descriptor
  5316.             CF set on error
  5317.                 AX = error code (see below)
  5318.     AX = 0203h build alias to real-mode segment
  5319.         BX = descriptor
  5320.         CX = real-mode segment
  5321.         Return: CF clear if successful
  5322.             CF set on error
  5323.                 AX = error code (see below)
  5324.     AX = 0204h set descriptor base
  5325.         BX = descriptor
  5326.         CX:DX = base address
  5327.         Return: CF clear if successful
  5328.             CF set on error
  5329.                 AX = error code (see below)
  5330.     AX = 0205h set descriptor limit
  5331.         BX = descriptor
  5332.         CX = limit
  5333.         Return: CF clear if successful
  5334.             CF set on error
  5335.                 AX = error code (see below)
  5336.     AX = 0206h set descriptor type/attribute
  5337.         BX = descriptor
  5338.         CL = type
  5339.         CH = attribute
  5340.         Return: CF clear if successful
  5341.             CF set on error
  5342.                 AX = error code (see below)
  5343.     AX = 0207h get descriptor base
  5344.         BX = descriptor
  5345.         Return: CF clear if successful
  5346.                 CX:DX = base address
  5347.             CF set on error
  5348.                 AX = error code (see below)
  5349.     AX = 0300h get size of largest free block of memory
  5350.         Return: CF clear if successful
  5351.                 BX:CX = size
  5352.             CF set on error
  5353.                 AX = error code (see below)
  5354.     AX = 0301h allocate block of extended memory
  5355.         BX:CX = size
  5356.         Return: CF clear if successful
  5357.                    BX:CX = base address
  5358.                 SI:DI = handle
  5359.             CF set on error
  5360.                 AX = error code (see below)
  5361.     AX = 0302h free block of extended memory
  5362.         SI:DI = handle
  5363.         Return: CF clear if successful
  5364.             CF set on error
  5365.                 AX = error code (see below)
  5366.     AX = 0303h map linear memory
  5367.         ES:[DI] = DDS
  5368.         Return: CF clear if successful
  5369.                 BX:CX = base address
  5370.                 SI:DI = handle
  5371.             CF set on error
  5372.                 AX = error code (see below)
  5373.     AX = 0304h unmap linear memory
  5374.         SI:DI = handle
  5375.         Return: CF clear if successful
  5376.             CF set on error
  5377.                 AX = error code (see below)
  5378.     AX = 0400h relocate segment to extended memory
  5379.         ES:SI = base address
  5380.         CX = limit
  5381.         BL = type
  5382.         BH = attribute
  5383.         DX = selector or 0000h
  5384.         Return: CF clear if successful
  5385.                 AX = selector
  5386.                 BX:CX = new base address
  5387.                 SI:DI = handle
  5388.             CF set on error
  5389.                 AX = error code (see below)
  5390.  
  5391. Values for error code:
  5392.  8000h    general error
  5393.  8001h    unsupported function
  5394.  8011h    descriptor unavailable
  5395.  8012h    linear memory unavailable
  5396.  8013h    physical memory unavailable
  5397.  8021h    invalid value
  5398.  8022h    invalid selector
  5399.  8023h    invalid handle
  5400.  
  5401. Format of callup/down register structure:
  5402. Offset    Size    Description
  5403.  00h    DWORD    EDI
  5404.  04h    DWORD    ESI
  5405.  08h    DWORD    EBP
  5406.  0Ch  4 BYTEs    reserved (0)
  5407.  10h    DWORD    EBX
  5408.  14h    DWORD    EDX
  5409.  18h    DWORD    ECX
  5410.  20h    DWORD    EAX
  5411.  24h    DWORD    EIP
  5412.  28h    WORD    CS
  5413.  2Ah  2 BYTEs    reserved (0)
  5414.  2Ch    DWORD    EFLAGS
  5415.  30h    DWORD    ESP
  5416.  34h    WORD    SS
  5417.  36h  2 BYTEs    reserved (0)
  5418.  38h    WORD    ES
  5419.  3Ah  2 BYTEs    reserved (0)
  5420.  3Ch    WORD    DS
  5421.  3Eh  2 BYTEs    reserved (0)
  5422.  40h    WORD    FS
  5423.  42h  2 BYTEs    reserved (0)
  5424.  44h    WORD    GS
  5425.  46h  2 BYTEs    reserved (0)
  5426. ----------2F44-------------------------------
  5427. INT 2F U - DOS Extender support???
  5428.     AH = 44h
  5429.     AL = function (at least 0Bh, 15h, 17h)
  5430.     ???
  5431. Return: ???
  5432. Note:    called by Codeview for Windows
  5433. SeeAlso: AH=86h
  5434. --------G-2F4500-----------------------------
  5435. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK
  5436.     AX = 4500h
  5437. Return: AL = 01h if PROF.COM installed
  5438.     AL = 02h if VPROD.386 installed
  5439. SeeAlso: AX=4501h,AX=4502h
  5440. --------G-2F4501-----------------------------
  5441. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER
  5442.     AX = 4501h
  5443.     BX = CSIPS buffer size in KB (first parameter for ProfSetup)
  5444.     CX = output limit in KB (second parameter for ProfSetup)
  5445. Note:    this call is not supported by PROF.COM
  5446. SeeAlso: AX=4502h,AX=4503h
  5447. --------G-2F4502-----------------------------
  5448. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE
  5449.     AX = 4502h
  5450.     BL = sampling rate for PROF.COM (0 < BL <= 13)
  5451.         (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
  5452.     CX = sampling rate for VPROD.386
  5453. Note:    for PROF.COM, this programs the CMOS clock by setting BL+2 as the
  5454.       low four bits of CMOS register 0Ah.  The interruption rate is
  5455.       1 SHL (15 - BL) per second.
  5456. SeeAlso: AX=4501h,AX=4503h
  5457. --------G-2F4503-----------------------------
  5458. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING
  5459.     AX = 4503h
  5460. Notes:    Profiling is also turned on by the key combinations
  5461.       LeftShift + RightShift + Alt
  5462.       LeftShift + RightShift + Ctrl
  5463.     for PROF.COM, this call programs the CMOS clock by reading register
  5464.       0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  5465.       is unmasked
  5466. SeeAlso: AX=4504h
  5467. --------G-2F4504-----------------------------
  5468. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING
  5469.     AX = 4504h
  5470. Notes:    profiling is also turned off by the key combination
  5471.       LeftShift + RightShift
  5472.     for PROF.COM, this programs the CMOS clock by reading register 0Ch
  5473.       and clearing bit 6 of register 0Bh.  It then masks IRQ8.
  5474. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h
  5475. --------G-2F4505-----------------------------
  5476. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA
  5477.     AX = 4505h
  5478. SeeAlso: AX=4503h,AX=4504h,AX=4506h
  5479. --------G-2F4506-----------------------------
  5480. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush"
  5481.     AX = 4506h
  5482. SeeAlso: AX=4505h,AX=4507h
  5483. --------G-2F4507-----------------------------
  5484. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish"
  5485.     AX = 4507h
  5486. Note:    this call is essentially a "ProfStop" (AX=4504h) followed by
  5487.       "ProfFlush" (AX=4506h)
  5488. SeeAlso: AX=4504h,AX=4505h,AX=4506h
  5489. --------G-2F4508-----------------------------
  5490. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE
  5491.     AX = 4508h
  5492.     BX = ordinal (or 0000h)
  5493.     CX = segment
  5494.     DX = instance (or 0000h)
  5495.     SI = type (or 0000h)
  5496.     ES:DI -> ASCIZ module name
  5497. Notes:    this call is an alternate entry to the profiler's SEGDEBUG
  5498.       interface, but only to function 0, for notifying the profiler of
  5499.       each new segment loaded.  The SHOWHITS utility then examines the
  5500.       profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  5501.       with symbol files to provide information in a useful form.
  5502.     this call does not have a corresponding Windows function
  5503. SeeAlso: AX=4500h 
  5504. --------D-2F4601-----------------------------
  5505. INT 2F U - DOS 5+ kernel - ???
  5506.     AX = 4601h
  5507. Return: ???
  5508. Note:    copies the MCB following the caller's PSP memory block into DOS data
  5509.       segment
  5510. SeeAlso: AX=4602h
  5511. --------D-2F4602-----------------------------
  5512. INT 2F U - DOS 5+ kernel - ???
  5513.     AX = 4602h
  5514. Return: ???
  5515. Note:    copies previously copied MCB from DOS data segment into MCB following
  5516.       caller's PSP memory block
  5517. SeeAlso: AX=4601h
  5518. ----------2F46-------------------------------
  5519. INT 2F U - Windows/286 DOS Extender
  5520.     AH = 46h
  5521.     AL = subfunction (03h,04h)
  5522. Return: ???
  5523. Note:    these two subfunctions are called by MS Windows 3.0
  5524. --------v-2F4653CX0002-----------------------
  5525. INT 2F - F-PROT v1.x only - F-LOCK.EXE 
  5526.     AX = 4653h
  5527.     CX = 0002h
  5528.     BX = subfunction
  5529.         0000h  installation check
  5530.         Return: AX = FFFFh
  5531.         0001h  uninstall
  5532.         Return: AX,BX,ES destroyed
  5533.         0002h  disable (v1.08 and below only)
  5534.         0003h  enable (v1.08 and below only)
  5535. Note:    F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik
  5536.       Skulason
  5537. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  5538. Index:    installation check;F-LOCK|uninstall;F-LOCK
  5539. --------v-2F4653CX0003-----------------------
  5540. INT 2F - F-PROT v1.x only - F-XCHK.EXE
  5541.     AX = 4653h
  5542.     CX = 0003h
  5543.     BX = subfunction
  5544.         0000h  installation check
  5545.         Return: AX = FFFFh
  5546.         0001h  uninstall
  5547.         Return: AX,BX,ES destroyed
  5548. Note:    F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik
  5549.       Skulason
  5550. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  5551. Index:    installation check;F-XCHK|uninstall;F-XCHK
  5552. --------v-2F4653CX0004-----------------------
  5553. INT 2F - F-PROT v1.x only - F-POPUP.EXE
  5554.     AX = 4653h
  5555.     CX = 0004h
  5556.     BX = subfunction
  5557.         0000h  installation check
  5558.         Return: AX = FFFFh
  5559.         0001h  uninstall
  5560.         Return: AX,BX,ES destroyed
  5561.         0002h  disable (v1.08 and below only)
  5562.            display message (v1.14+)
  5563.             other registers: ???
  5564.         0003h  enable (v1.08 and below only)
  5565.            display message (v1.14+)
  5566.             other registers: ???
  5567.             Return: AX = key pressed by user
  5568. Note:    F-POPUP is part of the F-PROT virus/trojan protection package by
  5569.       Fridrik Skulason
  5570. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  5571. Index:    installation check;F-POPUP|uninstall;F-POPUP
  5572. --------v-2F4653CX0005-----------------------
  5573. INT 2F - F-PROT v1.x only - F-DLOCK.EXE
  5574.     AX = 4653h
  5575.     CX = 0005h
  5576.     BX = subfunction
  5577.         0000h installation check
  5578.         Return: AX = FFFFh
  5579.         0001h uninstall
  5580.         Return: AX,BX,ES destroyed
  5581. Note:    F-DLOCK is part of the F-PROT virus/trojan protection package by
  5582.       Fridrik Skulason
  5583. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  5584. Index:    installation check;F-DLOCK|uninstall;F-DLOCK
  5585. --------W-2F4680-----------------------------
  5586. INT 2F U - MS Windows v3.0 - INSTALLATION CHECK
  5587.     AX = 4680h
  5588. Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  5589.            or DOS 5 DOSSHELL active
  5590.        nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  5591.             mode
  5592. Note:    Windows 3.1 finally provides an installation check which works in all
  5593.       modes (see AX=160Ah)
  5594. SeeAlso: AX=1600h,AX=160Ah
  5595. ----------2F47-------------------------------
  5596. INT 2F U - ???
  5597.     AH = 47h
  5598.     ???
  5599. Return: ???
  5600. Note:    reportedly called by Microsoft BASIC Compiler v7.0
  5601. --------K-2F4800-----------------------------
  5602. INT 2F - DOS 5+ DOSKEY - INSTALLATION CHECK
  5603.     AX = 4800h
  5604. Return: AL = nonzero if installed (DOS 5.0 and 6.0 return AX=AA02h)
  5605.         ES = segment of DOSKEY resident portion
  5606. Note:    DOSKEY chains if AL is not 00h or 10h on entry
  5607. SeeAlso: AX=4800h"PCED",AX=4810h
  5608. --------K-2F4800-----------------------------
  5609. INT 2F - PCED v2.1 - INSTALLATION CHECK
  5610.     AX = 4800h
  5611. Return: AX = AACDh if installed
  5612.         ES = segment of PCED kernel (PCED has multiple code segments)
  5613. Program: PCED v2.1 is a command line editor/history/macro facility by
  5614.       Cove Software.  It is the commercial version of the freeware CED.
  5615. Notes:    DOSKEY also responds to this call if installed, returning AX=AA02h.
  5616.     unlike DOSKEY, PCED does *not* chain if AL contains an
  5617.       unsupported function code.  It IRETs with all registers intact.
  5618. --------K-2F4810-----------------------------
  5619. INT 2F - DOS 5+ DOSKEY, PCED v2.1 - READ INPUT LINE FROM CONSOLE
  5620.     AX = 4810h
  5621.     DS:DX -> line buffer (see INT 21/AH=0Ah)
  5622. Return: AX = 0000h if successful
  5623. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  5624.       the previous handler; PCED allows sizes other than 80h
  5625.     if the user's input is a macro name, no text is placed in the buffer
  5626.       even though AX=0000h on return; the program must immediately issue
  5627.       this call again to retrieve the expansion of the macro.  Similarly,
  5628.       if the user enters a special parameter such as $*, this call must
  5629.       be repeated to retrieve the expansion; on the second call, DOSKEY
  5630.       overwrites the macro name on the screen with its expansion.
  5631.     unlike DOSKEY, PCED expands all macros on the first call, so it is
  5632.       not necessary to make two calls; since the buffer is not empty on
  5633.       return, DOSKEY-aware programs will not make the second call
  5634.     DOSKEY chains if AL is not 00h or 10h on entry
  5635. SeeAlso: AX=4800h,INT 21/AH=0Ah
  5636. --------K-2F48C0-----------------------------
  5637. INT 2F - PCED v2.1 - PCED API
  5638.     AX = 48C0h
  5639.     DX = API function code
  5640.     other registers as required by the specified function
  5641. Return: CF clear if successful
  5642.     CF set on error
  5643.         AX = PCED error code
  5644.     other registers as appropriate for API function
  5645. Program: PCED v2.1 is a command line editor/history/macro facility by
  5646.       Cove Software.  It is the commercial version of the freeware CED.
  5647. Note:    the full API information is available from Cove Software
  5648. SeeAlso: AX=4800h"PCED",AX=48C1h,AX=48C2h,AX=48C3h
  5649. ----------2F48C1BL00-------------------------
  5650. INT 2F - PCED/VSTACK - INSTALLATION CHECK
  5651.     AX = 48C1h
  5652.     BL = 00h
  5653. Return: AX = 0000h if installed
  5654.         BX = VSTACK resident segment
  5655. Program: VSTACK is a resident backscroll utility included as part of the PCED
  5656.       package
  5657. Note:    chains if BL <> 00h on entry
  5658. SeeAlso: AX=48C0h,AX=48C2h
  5659. ----------2F48C2BL00-------------------------
  5660. INT 2F - PCED/ATTRIB - INSTALLATION CHECK
  5661.     AX = 48C2h
  5662.     BL = 00h
  5663. Return: AX = 0000h if installed
  5664.         BX = ATTRIB resident segment
  5665. Program: ATTRIB is a resident file attribute changer included as part of the
  5666.       PCED package
  5667. Note:    chains if BL <> 00h on entry
  5668. SeeAlso: AX=48C0h,AX=48C1h,AX=48C3h
  5669. --------K-2F48C3BL00-------------------------
  5670. INT 2F - PCED/KEYDEF - INSTALLATION CHECK
  5671.     AX = 48C3h
  5672.     BL = 00h
  5673. Return: AX = 0000h if installed
  5674.         BX = KEYDEF resident segment
  5675. Program: KEYDEF is a resident keyboard redefinition utility included as part
  5676.       of the PCED package
  5677. Note:    chains if BL <> 00h on entry
  5678. SeeAlso: AX=48C0h,AX=48C2h,AX=48C4h
  5679. ----------2F48C4BL00-------------------------
  5680. INT 2F - PCED/FLIST - INSTALLATION CHECK
  5681.     AX = 48C4h
  5682.     BL = 00h
  5683. Return: AX = 0000h if installed
  5684.         BX = FLIST resident segment
  5685. Program: FLIST is a resident filelist processor included as part of the PCED
  5686.       package
  5687. Note:    chains if BL <> 00h on entry
  5688. SeeAlso: AX=48C0h,AX=48C3h,AX=48C5h
  5689. ----------2F48C4BL00-------------------------
  5690. INT 2F - PCED/ASSOC - INSTALLATION CHECK
  5691.     AX = 48C4h
  5692.     BL = 00h
  5693. Return: AX = 0000h if installed
  5694.         BX = ASSOC resident segment
  5695. Program: ASSOC is a resident utility included as part of the PCED package which
  5696.       associated files with executable programs based on their extensions
  5697. Note:    chains if BL > 02h on entry
  5698. SeeAlso: AX=48C0h,AX=48C4h,AX=48C5h/BL=01h,AX=48C5h/BL=02h
  5699. ----------2F48C5BL01-------------------------
  5700. INT 2F - PCED/ASSOC - VERSION CHECK
  5701.     AX = 48C5h
  5702.     BL = 01h
  5703. Return: AX = 0000h if installed
  5704.         BX = binary ASSOC version (BL = major, BH = minor)
  5705. Note:    chains if BL > 02h on entry
  5706. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=02h
  5707. ----------2F48C5BL02-------------------------
  5708. INT 2F - PCED/ASSOC - ASSOCIATION TEST
  5709.     AX = 48C5h
  5710.     BL = 02h
  5711.     DS:SI -> ASCIZ filename
  5712. Return: AX = status
  5713.         0000h if filename is unknown
  5714.         0001h if there is an association defined for the file
  5715.     BX destroyed
  5716. Program: ASSOC is a resident utility included as part of the PCED package which
  5717.       associated files with executable programs based on their extensions
  5718. Note:    chains if BL > 02h on entry
  5719. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=01h
  5720. ----------2F49-------------------------------
  5721. INT 2F U - ???
  5722.     AH = 49h
  5723.     ???
  5724. Return: ???
  5725. Note:    reportedly called by DOS 5.0 installation
  5726. --------D-2F4A00CX0000-----------------------
  5727. INT 2F CU - DOS 5+ - FLOPPY-DISK LOGICAL DRIVE CHANGE NOTIFICATION
  5728.     AX = 4A00h
  5729.     CX = 0000h
  5730.     DH = new drive number
  5731.     DL = current drive number
  5732. Return: CX = FFFFh to skip "Insert diskette for drive X:" message
  5733. Note:    called by MS-DOS 5.0+ IO.SYS just before displaying the message
  5734.       "Insert diskette for drive X:" on single-floppy systems
  5735. --------D-2F4A01-----------------------------
  5736. INT 2F - DOS 5+ - QUERY FREE HMA SPACE
  5737.     AX = 4A01h
  5738. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  5739.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  5740. Note:    called by Windows 3.1 DOSX.EXE
  5741. SeeAlso: AX=4310h,AX=4A02h
  5742. --------D-2F4A02-----------------------------
  5743. INT 2F - DOS 5+ - ALLOCATE HMA SPACE
  5744.     AX = 4A02h
  5745.     BX = number of bytes
  5746. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  5747.     BX = number of bytes actually allocated (rounded up to next paragraph
  5748.         for DOS 5.0 and 6.0)
  5749. Notes:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  5750.     called by Windows 3.1 DOSX.EXE
  5751. SeeAlso: AX=4A01h
  5752. --------T-2F4A05-----------------------------
  5753. INT 2F U - DOS 5+ DOSSHELL - TASK SWITCHING API???
  5754.     AX = 4A05h
  5755.     SI = function
  5756.         0000h reset???
  5757.         0001h ???
  5758.         ES:BP -> 80-byte buffer containing ???
  5759.         0002h ???
  5760.         0003h ???
  5761.         0004h ???
  5762.         BL = ???
  5763.         0005h ???
  5764.         0006h get ???
  5765.         Return: ES:SI -> ???
  5766.         0007h get ???
  5767.         Return: AX = ???
  5768.         0008h get ???
  5769.         Return: DX:AX -> ??? (internal control data of some kind)
  5770.         0009h get ???
  5771.         Return: ES:SI -> ??? (apparently identical to function 0006h)
  5772.         000Ah ???
  5773.         BL = length of buffer
  5774.         ES:BP -> buffer containing ???
  5775.         000Bh get ???
  5776.         Return: AX = ???
  5777.         000Ch ???
  5778.         BL = ???
  5779.         Return: if BL nonzero on entry
  5780.                 DX:AX -> ???
  5781.             if BL = 00h on entry
  5782.                 ES:SI -> ???
  5783. Notes:    DOSSHELL chains to the previous handler if SI is not one of the values
  5784.       listed above
  5785.     the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch
  5786.     the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls
  5787. SeeAlso: AX=4B01h
  5788. --------D-2F4A06-----------------------------
  5789. INT 2F CU - DOS 5+ - DOS SUPERVISOR "REBOOT PANEL" - ADJUST MEMORY SIZE
  5790.     AX = 4A06h
  5791.     DX = segment following last byte of conventional memory
  5792. Return: DX = segment following last byte of memory available for use by DOS
  5793. Desc:    used to override the default memory size when booting diskless
  5794.       workstations
  5795. Notes:    called by MS-DOS 5+ IO.SYS startup code if the signature "RPL" is
  5796.       present three bytes beyond the INT 2F handler; this call overrides
  5797.       the value returned by INT 12
  5798.     hooked by RPL code at the top of memory to protect itself from being
  5799.       overwritten; DOS builds a memory block with owner = 0008h and name
  5800.       "RPL" which must be freed by the RPL code when it is done
  5801. SeeAlso: INT 12
  5802. ----------2F4A07-----------------------------
  5803. INT 2F U - RESERVED FOR PROTMAN SUPPORT
  5804.     AX = 4A07h
  5805.     ???
  5806. Return: ???
  5807. --------c-2F4A10BX0000-----------------------
  5808. INT 2F - SMARTDRV v4.00+ - INSTALLATION CHECK AND HIT RATIOS
  5809.     AX = 4A10h
  5810.     BX = 0000h
  5811.     CX = EBABh (v4.1+; see Note)
  5812. Return: AX = BABEh if installed
  5813.         DX:BX = cache hits
  5814.         DI:SI = cache misses
  5815.         CX = ???
  5816.         BP = version in BCD (4.10 = 0410h)
  5817. Notes:    most of the SMARTDRV API, including this call, is supported by
  5818.       PC-Cache v8.0
  5819.     if DBLSPACE.BIN is installed but SMARTDRV has not yet been installed,
  5820.       unless CX=EBABh on entry, DBLSPACE.BIN displays the error message
  5821.       "Cannot run SMARTDrive 4.0 with DoubleSpace" and aborts the caller
  5822.       with INT 21/AX=4C00h
  5823.     SMARTDRV v3.x had a completely different API using IOCTL calls
  5824. SeeAlso: AX=4A10h/BX=0001h,AX=4A10h/BX=0004h,AX=4A10h/BX=0005h
  5825. SeeAlso: AX=4A10h/BX=0007h,AX=4A10h/BX=1234h,AX=4A11h/BX=0000h
  5826. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  5827. --------c-2F4A10BX0001-----------------------
  5828. INT 2F - SMARTDRV v4.00+ - FLUSH BUFFERS
  5829.     AX = 4A10h
  5830.     BX = 0001h
  5831. Note:    this function is also supported by PC-Cache v8.0.
  5832. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0002h
  5833. --------c-2F4A10BX0002-----------------------
  5834. INT 2F - SMARTDRV v4.00+ - RESET CACHE
  5835.     AX = 4A10h
  5836.     BX = 0002h
  5837. Note:    this function is also supported by PC-Cache v8.0.
  5838. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0001h
  5839. --------c-2F4A10BX0003-----------------------
  5840. INT 2F - SMARTDRV v4.00+ - STATUS
  5841.     AX = 4A10h
  5842.     BX = 0003h
  5843.     BP = drive # (0=A, 1=B, etc.)
  5844.     DL = subfunction
  5845.         00h only get information
  5846.         01h turn on read cache
  5847.         02h turn off read cache
  5848.         03h turn on write cache
  5849.         04h turn off write cache
  5850. Return: AX = BABEh if OK
  5851.     DL = status
  5852.         bit 7  not cached
  5853.         bit 6  write-through
  5854.         bit 5  ???
  5855.         bits 0-4 drive # (0=A, 1=B...)
  5856.     DL = FFh if drive does not exist
  5857. Notes:    If the read cache is off, reads will not be cached, but writes will
  5858.       continue to be cached if the write-cache is enabled.
  5859.     this function is also supported by PC-Cache v8.0.
  5860. SeeAlso: AX=4A10h/BX=0000h
  5861. --------c-2F4A10BX0004-----------------------
  5862. INT 2F - SMARTDRV v4.00+ - GET CACHE SIZE
  5863.     AX = 4A10h
  5864.     BX = 0004h
  5865. Return: AX = current size in elements???
  5866.     BX = largest number of elements
  5867.     CX = size of elements in bytes
  5868.     DX = number of elements under Windows
  5869. Note:    this function is also supported by PC-Cache v8.0.
  5870. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0005h
  5871. --------c-2F4A10BX0005-----------------------
  5872. INT 2F - SMARTDRV v4.00+ - GET DOUBLE-BUFFER STATUS
  5873.     AX = 4A10h
  5874.     BX = 0005h
  5875.     BP = drive # (0=A, 1=B...)
  5876. Return: AX = BABEh if double-buffered
  5877.         ES:DI -> ???
  5878. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0006h
  5879. --------c-2F4A10BX0006-----------------------
  5880. INT 2F CU - SMARTDRV v4.00+ - CHECK IF DRIVE CACHEABLE
  5881.     AX = 4A10h
  5882.     BX = 0006h
  5883.     CL = drive number (01h = A:)
  5884. Return: AX = 0006h if drive should not be cached by SMARTDRV
  5885. Note:    called by SMARTDRV at startup to determine whether it should cache
  5886.       a particular drive
  5887. SeeAlso: AX=4A10h/BX=0000h
  5888. --------c-2F4A10BX0007-----------------------
  5889. INT 2F - SMARTDRV v4.00+ - GET DEVICE DRIVER FOR DRIVE
  5890.     AX = 4A10h
  5891.     BX = 0007h
  5892.     BP = drive number
  5893. Return: DL = ???
  5894.     ES:DI -> device driver header for drive
  5895. Note:    this function is also supported by PC-Cache v8.0.
  5896. SeeAlso: AX=4A10h/BX=0000h,AX=4A11h/BX=0003h,AX=4A11h/BX=0004h
  5897. --------c-2F4A10BX000A-----------------------
  5898. INT 2F - SMARTDRV v4.00+ - GET TABLE POINTER???
  5899.     AX = 4A10h
  5900.     BX = 000Ah
  5901. Return: ES:BX -> table of about 10 bytes or 5 words. Seems to be words
  5902.          pointing to memory addresses containing info??? (see below)
  5903. Note:    this function is also supported by PC-Cache v8.0.
  5904. SeeAlso: AX=4A10h/BX=0000h
  5905.  
  5906. Format of data table:
  5907. Offset    Size    Description
  5908.  00h  8 BYTEs    ???
  5909.  08h    WORD    offset of WORD containing number of elements in cache
  5910. --------c-2F4A10BX1234-----------------------
  5911. INT 2F - SMARTDRV v4.00+ - SIGNAL SERIOUS ERROR
  5912.     AX = 4A10h
  5913.     BX = 1234h
  5914. Desc:    pops up a message box saying that a serious error occurred and to hit
  5915.       R to retry.
  5916. Note:    this function is also supported by PC-Cache v8.0.
  5917. SeeAlso: AX=4A10h/BX=0000h
  5918. --------d-2F4A11BX0000-----------------------
  5919. INT 2F - DBLSPACE.BIN - "GetVersion" - INSTALLATION CHECK
  5920.     AX = 4A11h
  5921.     BX = 0000h
  5922. Return: AX = 0000h (successful)
  5923.     BX = 444Dh ("DM")
  5924.     CL = first drive letter used by DBLSPACE (0=A:)
  5925.     CH = number of drive letters used by DBLSPACE
  5926.     DX = internal DBLSPACE.BIN version number (bits 14-0)
  5927.         bit 15 set if DBLSPACE.BIN has not yet been relocated to final
  5928.         position in memory (i.e. DBLSPACE.SYS /MOVE)
  5929. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  5930.       disk-compression software bundled with MS-DOS 6.0
  5931. SeeAlso: AX=4A11h/BX=0001h,AX=4A11h/BX=0002h,AX=4A11h/BX=0003h
  5932. SeeAlso: AX=4A11h/BX=0005h,AX=4A11h/BX=0007h,AX=4A11h/BX=FFFFh
  5933. SeeAlso: INT 21/AX=4404h"DBLSPACE"
  5934. --------d-2F4A11BX0001-----------------------
  5935. INT 2F - DBLSPACE.BIN - "GetDriveMapping" - GET DRIVE MAPPING
  5936.     AX = 4A11h
  5937.     BX = 0001h
  5938.     DL = drive number (0=A:)
  5939. Return: AX = status (see also below)
  5940.             0000h successful
  5941.             BL = host drive (bit 7 set if specified drive is compressed)
  5942.         BH = DoubleSpace sequence number
  5943.         other error code (0101h) (see below)
  5944. Note:    the compressed volume file for the specified compressed drive is
  5945.       host:\DBLSPACE.sequence
  5946. SeeAlso: AX=4A11h/BX=0000h
  5947.  
  5948. Values for status:
  5949.  0000h    successful
  5950.  0100h    bad function
  5951.  0101h    invalid drive
  5952.  0102h    not a compressed drive
  5953.  0103h    drive already swapped
  5954.  0104h    drive not swapped
  5955. --------d-2F4A11BX0002-----------------------
  5956. INT 2F - DBLSPACE.BIN - "Swap Drive" - SWAP DRIVE LETTERS OF CVF AND HOST DRIVE
  5957.     AX = 4A11h
  5958.     BX = 0002h
  5959.     DL = drive number (0=A:) of compressed drive to swap with its host
  5960. Return: AX = status (0000h,0101h,0102h,0103h) (see AX=4A11h/BX=0001h)
  5961. Note:    this function is intended for use by DBLSPACE.EXE only
  5962. SeeAlso: AX=4A11h/BX=0000h
  5963. --------d-2F4A11BX0003-----------------------
  5964. INT 2F U - DBLSPACE.BIN - GET DEVICE DRIVER ENTRY POINTS
  5965.     AX = 4A11h
  5966.     BX = 0003h
  5967.         CL = drive number (0=A:) of compressed drive
  5968. Return: CL = FFh on error (not compressed drive)
  5969.        = other host drive???
  5970.         ES:SI -> device driver's strategy routine
  5971.         ES:DI -> device driver's interrupt routine
  5972.     BX destroyed
  5973. Note:    the official documentation states that this function is reserved for
  5974.       use by SMARTDRV; this function and AX=4A11h/BX=0004h allow SMARTDRV
  5975.       to apply the same device driver wrapper to DoubleSpaced drives that
  5976.       it applies to regular block devices
  5977. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0004h
  5978. --------d-2F4A11BX0004-----------------------
  5979. INT 2F U - DBLSPACE.BIN - SET DEVICE DRIVER ENTRY POINTS
  5980.     AX = 4A11h
  5981.     BX = 0004h
  5982.         CL = drive number (0=A:) of compressed drive
  5983.     ES:SI -> device driver strategy routine to call for drive
  5984.     ES:DI -> device driver interrupt routine to call for drive
  5985.     DX = ???host for compressed drive
  5986. Return: CL = FFh on error
  5987.     BX destroyed
  5988. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  5989.       disk-compression software bundled with MS-DOS 6.0
  5990. Note:    the official documentation states that this function is reserved for
  5991.       use by SMARTDRV; this function and AX=4A11h/BX=0003h allow SMARTDRV
  5992.       to apply the same device driver wrapper to DoubleSpaced drives that
  5993.       it applies to regular block devices
  5994. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0003h
  5995. --------d-2F4A11BX0005-----------------------
  5996. INT 2F - DBLSPACE.BIN - "ActivateDrive" - MOUNT COMPRESSED DRIVE
  5997.     AX = 4A11h
  5998.     BX = 0005h
  5999.     DL = drive number (0=A:) to assign to new drive
  6000.     ES:SI -> activation record (see below)
  6001. Return: status returned in activation record (see below)
  6002. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0006h
  6003.  
  6004. Format of activation record:
  6005. Offset    Size    Description
  6006.  00h  2 BYTEs    signature "MD" (4Dh 44h)
  6007.  02h    BYTE    4Dh ('M') mount command
  6008.  03h    BYTE    error code (set to FFh before calling)
  6009.          01h drive letter not available for DoubleSpace
  6010.         02h drive letter already in use
  6011.         03h no more disk units (increase MaxRemovableDrives in .INI)
  6012.         09h CVF too fragmented
  6013.  04h    BYTE    host drive number (0=A:)
  6014.  05h    ???    DISK_UNIT structure (not documented)
  6015. --------d-2F4A11BX0006-----------------------
  6016. INT 2F - DBLSPACE.BIN - "DeactivateDrive" - UNMOUNT COMPRESSED DRIVE
  6017.     AX = 4A11h
  6018.     BX = 0006h
  6019.     DL = drive number (0=A:) to unmount
  6020. Return: AX = status (0000h,0102h) (see AX=4A11h/BX=0001h)
  6021. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0005h
  6022. --------d-2F4A11BX0007-----------------------
  6023. INT 2F - DBLSPACE.BIN - "GetDriveSpace" - GET SPACE AVAIL ON COMPRESSED DRIVE
  6024.     AX = 4A11h
  6025.     BX = 0007h
  6026.     DL = compressed drive number (0=A:)
  6027. Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
  6028.         0000h successful
  6029.         DS:SI -> free space record (see below)
  6030. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6031.       disk-compression software bundled with MS-DOS 6.0
  6032. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  6033.  
  6034. Format of free space record:
  6035. Offset    Size    Description
  6036.  00h    DWORD    total number of sectors in drive's sector heap
  6037.  04h    DWORD    number of free sectors in drive's sector heap
  6038. --------d-2F4A11BX0008-----------------------
  6039. INT 2F - DBLSPACE.BIN - "GetFileFragmentSpace" - GET SIZE OF FRAGMENT HEAP
  6040.     AX = 4A11h
  6041.     BX = 0008h
  6042.     DL = compressed drive number (0=A:)
  6043. Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
  6044.         0000h successful
  6045.             BX = maximum entries in File Fragment heap
  6046.         CX = available entries in File Fragment heap
  6047. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0007h,AX=4A11h/BX=0009h
  6048. --------d-2F4A11BX0009-----------------------
  6049. INT 2F - DBLSPACE.BIN - "GetExtraInfo" - DETERMINE NUMBER OF DISK_UNIT STRUCTS
  6050.     AX = 4A11h
  6051.     BX = 0009h
  6052.     DL = compressed drive number (0=A:)
  6053. Return: AX = status (see also AX=4A11h/BX=0001h)
  6054.         0000h successful
  6055.         CL = number of DISK_UNIT structures allocated
  6056.             (see AX=4A11h/BX=0005h)
  6057. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  6058. --------d-2F4A11BXFFFE-----------------------
  6059. INT 2F U - DBLSPACE.BIN - RELOCATE
  6060.     AX = 4A11h
  6061.     BX = FFFEh
  6062.     ES = segment to which to relocate DBLSPACE.BIN
  6063. Return: ???
  6064. Notes:    called by DBLSPACE.SYS to relocate DBLSPACE.BIN to its final position
  6065.       in memory
  6066.     this function also unhooks and discards the code providing this
  6067.       function and AX=4A11h/BX=FFFFh
  6068. SeeAlso: AX=4A11h/BX=FFFFh
  6069. --------d-2F4A11BXFFFF-----------------------
  6070. INT 2F U - DBLSPACE.BIN - GET RELOCATION SIZE
  6071.     AX = 4A11h
  6072.     BX = FFFFh
  6073. Return: AX = number of paragraphs needed by DBLSPACE.BIN
  6074. Note:    used by DBLSPACE.SYS to relocate the DBLSPACE driver to its final
  6075.       position in memory
  6076. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=FFFEh
  6077. --------d-2F4A12CX4D52-----------------------
  6078. INT 2F - Microsoft Realtime Compression Interface (MRCI) - RAM-BASED SERVER
  6079.     AX = 4A12h
  6080.     CX = 4D52h ("MR")
  6081.     DX = 4349h ("CI")
  6082. Return: CX = 4943h ("IC") if installed
  6083.     DX = 524Dh ("RM") if installed
  6084.         ES:DI -> MRCINFO structure (see INT 1A/AX=B001h)
  6085. Note:    this call is functionally identical to INT 1A/AX=B001h, but should be
  6086.       called first, as the latter call is used for the first, ROM-based
  6087.       MRCI server, while this call is used for RAM-based servers which
  6088.       may be partially or entirely replacing a prior server
  6089. SeeAlso: INT 1A/AX=B001h
  6090. --------d-2F4A13-----------------------------
  6091. INT 2F U - DBLSPACE.BIN - GET ??? ENTRY POINTS
  6092.     AX = 4A13h
  6093. Return: AX = 134Ah if supported
  6094.         ES:BX -> entry point record (see below)
  6095. SeeAlso: AX=4A11h/BX=0000h
  6096.  
  6097. Format of entry point record:
  6098. Offset    Size    Description
  6099.  00h    DWORD    pointer to FAR function for ???
  6100.  04h  5 BYTEs    FAR JUMP instruction to ???
  6101. --------N-2F4B-------------------------------
  6102. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  6103.     AH = 4Bh
  6104.     ???
  6105. Return: ???
  6106. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  6107.       file/printer services
  6108. SeeAlso: AX=118Ah,AX=4100h,AH=42h
  6109. --------T-2F4B01-----------------------------
  6110. INT 2F C - DOS 5+ TASK SWITCHER - BUILD CALLOUT CHAIN
  6111.     AX = 4B01h
  6112.     CX:DX -> task switcher entry point (see AX=4B02h)
  6113.     ES:BX = 0000h:0000h
  6114. Return: ES:BX -> callback info structure (see below) or 0000h:0000h
  6115. Notes:    called by the task switcher
  6116.     this function is hooked by clients which require notification of task
  6117.       switcher activities; the call must first be passed on to the prior
  6118.       handler with registers unchanged using a simulated interrupt.     On
  6119.       return, the client must build a callback info structure and store
  6120.       the returned ES:BX in the "next" field, then return the address of
  6121.       its own callback info structure.
  6122.     a client program must add itself to the notification chain if it
  6123.       provides services to other programs; before terminating, it must
  6124.       remove itself from the chain by calling the task switcher's entry
  6125.       point with AX=0005h (see AX=4B02h)
  6126.     the task switcher entry point should not be saved, as it is subject to
  6127.       change and will be provided on any notification call
  6128.     the Windows 3.1 Standard Mode supports this API
  6129. SeeAlso: AX=160Bh,AX=4B02h
  6130.  
  6131. Format of callback info structure:
  6132. Offset    Size    Description
  6133.  00h    DWORD    pointer to next callback info structure
  6134.  04h    DWORD    pointer to notification function (see below)
  6135.  08h    DWORD    reserved
  6136.  0Ch    DWORD    address of zero-terminated list of API info structures
  6137.         (see AX=4B02h)
  6138.  
  6139. Notification function is called with:
  6140.     AX = function
  6141.         0000h switcher initialization
  6142.         Return: AX = 0000h if OK to load
  6143.                = nonzero to abort task switcher
  6144.         0001h query suspend
  6145.         BX = session ID
  6146.         Return: AX = 0000h if OK to switch session
  6147.                = 0001h if not
  6148.         0002h suspend session
  6149.         BX = session ID
  6150.         interrupts disabled
  6151.         Return: AX = 0000h if OK to switch session
  6152.                = 0001h if not
  6153.         0003h activate session
  6154.         BX = session ID
  6155.         CX = session status flags
  6156.             bit 0: set if first activation of session
  6157.             bits 1-15: reserved (0)
  6158.         interrupts disabled
  6159.         Return: AX = 0000h
  6160.         0004h session active
  6161.         BX = session ID
  6162.         CX = session status flags
  6163.             bit 0: set if first activation of session
  6164.             bits 1-15: reserved (0)
  6165.         Return: AX = 0000h
  6166.         0005h create session
  6167.         BX = session ID
  6168.         Return: AX = 0000h if OK to create session
  6169.                = 0001h if not
  6170.         0006h destroy session
  6171.         BX = session ID
  6172.         Return: AX = 0000h
  6173.         0007h switcher termination
  6174.         BX = flags
  6175.             bit 0: set if calling switcher is only switcher loaded
  6176.             bits 1-15: reserved (0)
  6177.         Return: AX = 0000h
  6178.     ES:DI -> task switcher entry point (see AX=4B02h)
  6179. Notes:    function 0000h is generally called by the program which controls or
  6180.       invokes the task switcher, rather than by the task switcher itself;
  6181.       the entry point supplied to this function is not necessarily the
  6182.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  6183.       any client indicates that loading is not possible, all clients will
  6184.       be called with function 0007h; thus it is possible for a client to
  6185.       receive a termination notice without a corresponding initialization
  6186.       notice.
  6187.     except for functions 0002h and 0003h, the notification handler is
  6188.       called with interrupts enabled and may make any INT 21h function
  6189.       call; interrupts must not be enabled in functions 0002h and 0003h
  6190.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  6191.       point is no longer valid
  6192. --------T-2F4B02BX0000-----------------------
  6193. INT 2F - DOS 5+ TASK SWITCHER - INSTALLATION CHECK
  6194.     AX = 4B02h
  6195.     BX = 0000h
  6196.     ES:DI = 0000h:0000h
  6197. Return: ES:DI = 0000h:0000h if task switcher not loaded
  6198.     ES:DI -> task switcher entry point (see below) if loaded
  6199.         AX = 0000h
  6200. Notes:    the returned entry point is that for the most-recently loaded task
  6201.       switcher; the entry points for prior task switchers may be determined
  6202.       with the "get version" call (see below)
  6203.     this function is supported by PC Tools v8+ CPTASK
  6204. SeeAlso: AX=4A05h,AX=4B03h
  6205.  
  6206. Call task switcher entry point with:
  6207.     AX = 0000h get version
  6208.         Return: CF clear if successful
  6209.                 AX = 0000h
  6210.                 ES:BX -> task switcher version struct (see below)
  6211.             CF set if unsupported function
  6212.     AX = 0001h test memory region
  6213.         ES:DI -> first byte to be tested
  6214.         CX = size of region to test
  6215.         Return: CF clear if successful
  6216.                 AX = memory type of tested region
  6217.                 0000h global
  6218.                 0001h global and local
  6219.                 0002h local (replaced on session switch)
  6220.             CF set if unsupported function
  6221.     AX = 0002h suspend switcher
  6222.         ES:DI -> new task switcher's entry point
  6223.         Return: CF clear if successful
  6224.                 AX = state
  6225.                 0000h switcher has been suspended
  6226.                 0001h switcher not suspended, new switcher must
  6227.                     abort
  6228.                 0002h switcher not suspended, but new switcher
  6229.                     may run anyway
  6230.             CF set if unsupported function
  6231.     AX = 0003h resume switcher
  6232.         ES:DI -> new task switcher's entry point
  6233.         Return: CF clear if successful
  6234.                 AX = 0000h
  6235.             CF set if unsupported function
  6236.     AX = 0004h hook notification chain
  6237.         ES:DI -> callback info structure to be added to chain
  6238.             (see AX=4B01h)
  6239.         Return: CF clear if successful
  6240.                 AX = 0000h
  6241.             CF set if unsupported function
  6242.     AX = 0005h unhook notification chain
  6243.         ES:DI -> callback info structure to be removed from chain
  6244.             (see AX=4B01h)
  6245.         Return: CF clear if successful
  6246.                 AX = 0000h
  6247.             CF set if unsupported function
  6248.     AX = 0006h query API support
  6249.         BX = asynchronous API identifier
  6250.         Return: CF clear if successful
  6251.                 AX = 0000h
  6252.                 ES:BX -> API info structure (see below) for the
  6253.                     client which provides the highest
  6254.                     level of 
  6255.             CF set if unsupported function
  6256.  
  6257. Format of task switcher version structure:
  6258. Offset    Size    Description
  6259.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  6260.  02h    WORD    minor version of supported protocol
  6261.  04h    WORD    major version of task switcher
  6262.  06h    WORD    minor version of task switcher
  6263.  08h    WORD    task switcher ID (see AX=4B03h)
  6264.  0Ah    WORD    operation flags
  6265.         bit 0: set if task switcher disabled
  6266.         bits 1-15: reserved (0)
  6267.  0Ch    DWORD    pointer to ASCIZ task switcher name
  6268.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  6269.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  6270.  
  6271. Format of API info structure:
  6272. Offset    Size    Description
  6273.  00h    WORD    size of structure in bytes (000Ah)
  6274.  02h    WORD    API identifier
  6275.         0001h NetBIOS
  6276.         0002h 802.2
  6277.         0003h TCP/IP
  6278.         0004h LAN Manager named pipes
  6279.         0005h Novell NetWare IPX
  6280.  04h    WORD    major version \ of highest version of API for which the support
  6281.  06h    WORD    minor version / level specified in the next field is provided
  6282.  08h    WORD    support level
  6283.         0001h minimal support
  6284.         0002h API-level support
  6285.         0003h switcher compatibility
  6286.         0004h seamless compatibility
  6287. --------T-2F4B03-----------------------------
  6288. INT 2F - DOS 5+ TASK SWITCHER - ALLOCATE SWITCHER ID
  6289.     AX = 4B03h
  6290.     ES:DI -> task switcher entry point (see AX=4B02h)
  6291. Return: AX = 0000h
  6292.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  6293. Notes:    if a task switcher has determined that it is the first to be loaded, it
  6294.       must allocate an identifier for itself and provide this function to
  6295.       all subsequent task switchers; if it is not the first to be loaded,
  6296.       it must call this function to allocate an ID.     The switcher ID is
  6297.       used as the high four bits of all session identifiers to ensure
  6298.       unique session IDs.
  6299.     if no more switcher IDs are available, the new task switcher making the
  6300.       call must terminate or disable itself
  6301.     the task switcher providing the identifiers may call the new task
  6302.       switcher's entry point as needed
  6303.     this call is available from within DOSSHELL even if the task switcher
  6304.       is not installed
  6305.     this function is supported by PC Tools v8+ CPTASK, but appears to
  6306.       always return an ID of 0000h
  6307. SeeAlso: AX=4B02h,AX=4B04h
  6308. --------T-2F4B04-----------------------------
  6309. INT 2F - DOS 5+ TASK SWITCHER - FREE SWITCHER ID
  6310.     AX = 4B04h
  6311.     BX = switcher ID
  6312.     ES:DI -> task switcher entry point (see AX=4B02h)
  6313. Return: AX = 0000h
  6314.     BX = status
  6315.         0000h successful
  6316.         other error (invalid ID or ID not allocated)
  6317. Notes:    called by a task switcher when it exits, unless it was the first loaded
  6318.       and is providing the support for AX=4B03h and AX=4B04h
  6319.     the task switcher providing the identifiers may call the terminating
  6320.       task switcher's entry point as needed
  6321.     this call is available from within DOSSHELL even if the task switcher
  6322.       is not installed
  6323.     this call is supported by PC Tools v8+ CPTASK, but appears to return
  6324.       sucessfully no matter which ID is given
  6325. SeeAlso: AX=4B02h,AX=4B03h
  6326. --------T-2F4B05-----------------------------
  6327. INT 2F C - DOS 5+ TASK SWITCHER - IDENTIFY INSTANCE DATA
  6328.     AX = 4B05h
  6329.     ES:BX = 0000h:0000h
  6330.     CX:DX -> task switcher entry point (see AX=4B02h)
  6331. Return: ES:BX -> startup info structure (see below) or 0000h:0000h
  6332. Notes:    called by task switcher
  6333.     clients with instance data should hook this call, pass it through to
  6334.       the previous handler with unchanged registers using a simulated
  6335.       interrupt.  On return, the client should create a startup info
  6336.       structure (see below), store the returned ES:BX in the "next"
  6337.       field, and return the address of the created structure in ES:BX
  6338.     all MS-DOS function calls are available from within this call
  6339. SeeAlso: AX=1605h,AX=160Bh,AX=4B02h
  6340.  
  6341. Format of startup info structure:
  6342. Offset    Size    Description
  6343.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  6344.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  6345.  06h    DWORD    0000h:0000h (ignored)
  6346.  0Ah    DWORD    ignored
  6347.  0Eh    DWORD    pointer to instance data records
  6348.  
  6349. Format of one instance data record in array:
  6350. Offset    Size    Description
  6351.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  6352.  04h    WORD    size of instance data
  6353. --------W-2F4B20-----------------------------
  6354. INT 2F - MS Windows 3 - WIN.COM - SET PROGRAM TO EXECUTE ON EXIT
  6355.     AX = 4B20h
  6356. Return: AX = 0000h if successful
  6357.         DX:CX -> 256-byte buffer for pathname and commandline (see below)
  6358. Note:    when the Windows function ExitWindows is called with an exit code of
  6359.       44h, WIN.COM executes the program specified in the returned buffer
  6360.       and then restarts Windows
  6361.  
  6362. Format of buffer:
  6363. Offset    Size    Description
  6364.  00h 128 BYTEs    ASCIZ pathname of program to execute
  6365.  80h 128 BYTEs    commandline for program
  6366. ----------2F4C-------------------------------
  6367. INT 2F U - Advanced Power Management
  6368.     AH = 4Ch
  6369.     AL = function
  6370.         00h version check
  6371.         01h suspend system requested
  6372.         FFh suspend/resume battery notification
  6373.     ???
  6374. Return: ???
  6375. ----------2F4D-------------------------------
  6376. INT 2F U - ???
  6377.     AH = 4Dh
  6378.     ???
  6379. Return: ???
  6380. Note:    reportedly called by Kana Kanji Converter and MSKK
  6381. --------N-2F4E53-----------------------------
  6382. INT 2F U - SilverNET - API
  6383.     AX = 4E53h ("SN")
  6384.     BH = major function class??? (04h and 02h are common)
  6385.     BL = subclass???
  6386.     CX = function number???
  6387.     ???
  6388. Return: AX = return value or status
  6389.     ???
  6390. Program: SilverNET is an SMB-compatible peer-to-peer NOS for DOS or
  6391.       Windows systems, by Net-Source of Santa Clara, CA.
  6392. SeeAlso: AX=B800h,AX=B809h
  6393. ----------2F53-------------------------------
  6394. INT 2F U - POWER.EXE - APM event broadcasting???
  6395.     AH = 53h
  6396.     AL = event???
  6397.         05h CPU idle
  6398.         0Bh PM event broadcast API
  6399. Return: ???
  6400. Note:    called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+
  6401.       and PC-Cache v8.0
  6402. SeeAlso: AX=530Bh,AH=54h,INT 33/AX=002Fh
  6403. ----------2F530B-----------------------------
  6404. INT 2F U - ??? (MOUSEPWR.COM, others) - ???
  6405.     AX = 530Bh
  6406.     BX = subfunction
  6407.         0003h ???
  6408.         0004h ???
  6409.     ???
  6410. Return: ???
  6411. Note:    it appears that subfunction 0003h reads or restores the current mouse
  6412.       settings (the MS Mouse driver hooks AX=530Bh), and 0004h might be
  6413.       the converse
  6414. ----------2F5400-----------------------------
  6415. INT 2F U - POWER.EXE - INSTALLATION CHECK
  6416.     AX = 5400h
  6417. Return: AX = POWER.EXE version (AH = major, AL = minor) if installed
  6418.     BX = 504Dh ("PM")
  6419.     CF clear
  6420. Note:    called by MS Windows 3.1 POWER.DRV
  6421. SeeAlso: AH=53h,AX=5401h,AX=5402h,AX=5481h,AX=5482h
  6422. ----------2F5401-----------------------------
  6423. INT 2F U - POWER.EXE - GET/SET POWER STATUS
  6424.     AX = 5401h
  6425.     BX = function
  6426.         0000h get status
  6427.             Return: BL = power management status
  6428.                 bit 0: CPU idle
  6429.                 bit 1: ???
  6430.         ???
  6431. Return: AX = function status
  6432.         0000h success
  6433.         else  error code
  6434. Note:    called by MS Windows 3.1 POWER.DRV
  6435. SeeAlso: AH=53h,AX=5400h,AX=5402h,AX=5403h
  6436. ----------2F5402-----------------------------
  6437. INT 2F U - POWER.EXE - GET/SET IDLE DETECTION STRATEGY
  6438.     AX = 5402h
  6439.     BH = subfunction
  6440.         00h get
  6441.         other set
  6442.             BL = detection strategy (00h-0Fh or FFh)
  6443. Return: BX = current/new detection strategy
  6444. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5481h,AX=5482h
  6445. ----------2F5403-----------------------------
  6446. INT 2F U - POWER.EXE - GET/SET ADVANCED POWER MANAGEMENT SETTING
  6447.     AX = 5403h
  6448.     BX = new power management setting or 0000h to get current setting
  6449. Return: AX = status
  6450.         0000h successful
  6451.             BX = power management setting (see below)
  6452.         other error code
  6453. SeeAlso: AX=5401h,AX=5480h
  6454.  
  6455. Values for power management setting:
  6456.  0001h-0005h "min"
  6457.  0006h       "reg"
  6458.  0007h-0008h "max"
  6459. --------t-2F5453-----------------------------
  6460. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  6461.     AX = 5453h
  6462.     BX = subfunction
  6463.         00h installation check
  6464.         CX = 0000h
  6465.         DS:SI -> 8-char blank-padded name
  6466.         Return: AX = FFFFh installed
  6467.                 CX = ID number of already-installed copy
  6468.                = anything else, not installed
  6469.                 CX = ID number for TSR when installed
  6470.         01h get user parameters
  6471.         CX = TSR ID number
  6472.         Return: AX = 0000h successful
  6473.                ES:BX -> user parameter block (see below)
  6474.                = nonzero failed
  6475.         02h check if hotkey in use
  6476.         CL = scan code of hot key
  6477.         Return: AX = FFFFh hot key conflicts with another TSR
  6478.                  otherwise safe to use the hotkey
  6479.         03h replace default critical error handler
  6480.         CX = TSR ID number
  6481.         DS:SI -> new routine for INT 24h
  6482.         Return: AX = nonzero, unable to install new handler
  6483.         04h get internal data area
  6484.         CX = TSR ID number
  6485.         Return: AX = 0000h
  6486.                 ES:BX -> TSR's internal data area (see below)
  6487.                = nonzero, TSR not found
  6488.         05h set multiple hot keys
  6489.         CX = TSR ID number
  6490.         DL = number of additional hot keys to allocate
  6491.         DS:SI -> table of hot keys
  6492.             BYTE  hotkey scan code
  6493.             BYTE  hotkey shift state
  6494.             BYTE  flag value to pass to TSR (nonzero)
  6495.         Return: AX = nonzero, unable to install hot keys
  6496.         06h - 0Fh reserved
  6497.         10h enable TSR
  6498.         CX = TSR ID number
  6499.         Return: AX = nonzero, unable to enable
  6500.         11h disable TSR
  6501.         CX = TSR ID number
  6502.         Return: AX = nonzero, unable to disable
  6503.         12h unload TSR
  6504.         CX = TSR ID number
  6505.         Return: AX = nonzero, invalid TSR number
  6506.         Note: if any interrupts used by TSR have been grabbed by
  6507.             another TSR, the TesSeRact routines will wait until
  6508.             it is safe to remove the indicated TSR from memory
  6509.         13h restart TSR
  6510.         CX = TSR ID number of TSR which was unloaded but is still in
  6511.              memory
  6512.         Return: AX = nonzero, unable to restart TSR
  6513.         14h get status word
  6514.         CX = TSR ID number
  6515.         Return: AX = FFFFh invalid ID number
  6516.                = other, successful
  6517.                 BX = bit flags
  6518.         15h set status word
  6519.         CX = TSR ID number
  6520.         DX = new bit flags
  6521.         Return: AX = nonzero, unable to set status word
  6522.         16h get INDOS state at popup
  6523.         CX = TSR ID number
  6524.         Return: AX = 0000h successful
  6525.                 BX = value of INDOS flag
  6526.         17h - 1Fh reserved
  6527.         20h call user procedure
  6528.         CX = TSR ID number
  6529.         ES:DI -> user-defined data
  6530.         Return: AX = 0000h successful
  6531.         21h stuff keystrokes into keyboard buffer
  6532.         CX = TSR ID number
  6533.         DL = speed
  6534.             00h stuff keystrokes only when buffer is empty
  6535.             01h stuff up to four keystrokes per clock tick
  6536.             02h stuff up to 15 keystrokes per clock tick
  6537.         DH = scan code flag
  6538.             if zero, buffer contains alternating ASCII and scan codes
  6539.             if nonzero, buffer contains only ASCII codes
  6540.         SI = number of keystrokes
  6541.         ES:DI -> buffer to stuff
  6542.         Return: AX = 0000h success
  6543.                  F0F0h user aborted with ^C or ^Break
  6544.                  other unable to stuff keystrokes
  6545.         22h (v1.10) trigger popup
  6546.         CX = TSR ID number
  6547.         Return: AX = 0000h success, TSR will either pop up or beep to
  6548.                    indicate that it is unable to pop up
  6549.                  nonzero invalid ID number
  6550.         23h (v1.10) invoke TSR's background function
  6551.         CX = TSR ID number
  6552.         Return: AX = 0000h success
  6553.                  FFFFh not safe to call background function
  6554.                  nonzero invalid ID number
  6555.         24h - 2Fh reserved
  6556. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  6557.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  6558.       do the SWAP?? programs by Innovative Data Concepts.
  6559.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  6560.       of the user parameter block) using the name "AVATAR  "
  6561. SeeAlso: AX=CAFEh,INT 2D"AMIS"
  6562. Index:    installation check;TesSeRact TSR interface
  6563.  
  6564. Format of User Parameter Block:
  6565. Offset    Size    Description
  6566.  00h  8 BYTEs    blank-padded TSR name
  6567.  08h    WORD    TSR ID number
  6568.  0Ah    DWORD    bitmap of supported functions
  6569.  0Eh    BYTE    scan code of primary hotkey
  6570.             00h = pop up when shift states match
  6571.             FFh = no popup (if shift state also FFh)
  6572.  0Fh    BYTE    shift state of primary hotkey
  6573.             FFh = no popup (if scan code also FFh)
  6574.  10h    BYTE    number of secondary hotkeys
  6575.  11h    DWORD    pointer to extra hotkeys set by func 05h
  6576.  15h    WORD    current TSR status flags
  6577.  17h    WORD    PSP segment of TSR
  6578.  19h    DWORD    DTA for TSR
  6579.  1Dh    WORD    default DS for TSR
  6580.  1Fh    DWORD    stack at popup
  6581.  23h    DWORD    stack at background invocation
  6582.  
  6583. Format of TSR internal data area:
  6584. Offset    Size    Description
  6585.  00h    BYTE    revision level of TesSeRact library
  6586.  01h    BYTE    type of popup in effect
  6587.  02h    BYTE    INT 08 occurred since last invocation
  6588.  03h    BYTE    INT 13 occurred since last invocation
  6589.  04h    BYTE    active interrupts
  6590.  05h    BYTE    active soft interrupts
  6591.  06h    BYTE    DOS major version
  6592.  07h    BYTE    how long to wait before popping up
  6593.  08h    DWORD    pointer to INDOS flag
  6594.  0CH    DWORD    pointer to DOS critical error flag
  6595.  10h    WORD    PSP segment of interrupted program
  6596.  12h    WORD    PSP segment of prog interrupted by INT 28
  6597.  14h    DWORD    DTA of interrupted program
  6598.  18h    DWORD    DTA of program interrupted by INT 28
  6599.  1Ch    WORD    SS of interrupted program
  6600.  1Eh    WORD    SP of interrupted program
  6601.  20h    WORD    SS of program interrupted by INT 28
  6602.  22h    WORD    SP of program interrupted by INT 28
  6603.  24h    DWORD    INT 24 of interrupted program
  6604.  28h  3 WORDs    DOS 3+ extended error info
  6605.  2Eh    BYTE    old BREAK setting
  6606.  2Fh    BYTE    old VERIFY setting
  6607.  30h    BYTE    were running MS WORD 4.0 before popup
  6608.  31h    BYTE    MS WORD 4.0 special popup flag
  6609.  32h    BYTE    enhanced keyboard call in use
  6610.  33h    BYTE    delay for MS WORD 4.0
  6611. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  6612.     DWORD    old interrupt vector
  6613.     BYTE    interrupt number
  6614.     WORD    offset in TesSeRact code segment of new interrupt handler
  6615. ----------2F5480-----------------------------
  6616. INT 2F U - POWER.EXE - GET/SET ???
  6617.     AX = 5480h
  6618.     BX = direction
  6619.         0000h get
  6620.         other set
  6621.     CX = size of buffer (at least 0010h)
  6622.     DS:SI -> buffer
  6623. Return: AX = status
  6624.         0000h successful
  6625.         other error code
  6626. SeeAlso: AX=5400h,AX=5481h,AX=548Fh
  6627. ----------2F5481-----------------------------
  6628. INT 2F U - POWER.EXE - GET STATISTICS
  6629.     AX = 5481h
  6630.     BX = ??? (0000h or 0001h)
  6631.     CX = length of buffer
  6632.     DS:SI -> buffer for statistics (see below)
  6633. Return: AX = status
  6634.         0000h successful
  6635.         else  error code
  6636. SeeAlso: AH=53h,AX=5400h,AX=5480h,AX=5402h,AX=5482h
  6637.  
  6638. Format of statistics:
  6639. Offset    Size    Description
  6640.  00h    DWORD    total ???
  6641.  04h    DWORD    ??? during which CPU was idle (divide by previous to get idle
  6642.              rate)
  6643. ----------2F5482-----------------------------
  6644. INT 2F U - POWER.EXE - GET/SET APM POLLING FREQUENCY
  6645.     AX = 5482h
  6646.     BX = new polling frequency or 0000h to get current frequency
  6647. Return: AX = 0000h (successful)
  6648.     BX = current frequency if BX=0000h on entry
  6649. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5480h,AX=5481h,AX=548Fh
  6650. ----------2F548F-----------------------------
  6651. INT 2F U - POWER.EXE - GET/SET ???
  6652.     AX = 548Fh
  6653.     BX = ??? or 0000h to get current ???
  6654. Return: AX = 0000h (successful)
  6655.     BX = current ???
  6656.     CX = ???
  6657. SeeAlso: AX=5400h,AX=5480h,AX=5482h
  6658. --------l-2F5500-----------------------------
  6659. INT 2F U - DOS 5+ - COMMAND.COM INTERFACE
  6660.     AX = 5500h
  6661. Return: AX = 0000h if an instance of COMMAND.COM is already running
  6662.     DS:SI -> entry point table
  6663. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  6664.       been moved into the HMA; only the primary COMMAND.COM retains this
  6665.       portion
  6666.     procedures called from a dispatcher in COMMAND's resident portion;
  6667.       most assume that the segment address of the resident portion is on
  6668.       the stack and are thus not of general use
  6669. SeeAlso: AX=5501h
  6670. --------l-2F5501-----------------------------
  6671. INT 2F U - DOS 5+ - ROM COMMAND.COM INTERFACE
  6672.     AX = 5501h
  6673. Return: ???
  6674. Note:    used to determine whether the caller is the first instance of ROM
  6675.       COMMAND.COM
  6676. SeeAlso: AX=5500h
  6677. --------R-2F5600DXFFFF-----------------------
  6678. INT 2F - INTERLNK - INSTALLATION CHECK
  6679.     AX = 5600h
  6680.     DX = FFFFh
  6681.     BL = instance number (00h = any, 01h = first loaded, etc.)
  6682. Return: AL = FFh if installed
  6683.         BL = instance number
  6684.         CX = ???
  6685.         DX = resident CS
  6686. SeeAlso: AX=5601h,AX=5602h
  6687. --------R-2F5601DXFFFF-----------------------
  6688. INT 2F - INTERLNK - CHECK IF REDIRECTED DRIVE
  6689.     AX = 5601h
  6690.     DX = FFFFh
  6691.     BH = drive number (0=A:)
  6692. Return: (as for AL=00h if redirected drive)
  6693. SeeAlso: AX=5600h
  6694. --------R-2F5602DXFFFF-----------------------
  6695. INT 2F - INTERLNK - GET ???
  6696.     AX = 5602h
  6697.     DX = FFFFh
  6698. Return: CX = ???
  6699. SeeAlso: AX=5600h
  6700. ----------2F57-------------------------------
  6701. INT 2F U - ???
  6702.     AH = 57h
  6703.     ???
  6704. Return: ???
  6705. Note:    reportedly used by Iomega Corp.
  6706. --------v-2F6282-----------------------------
  6707. INT 2F U - PC Tools v7.0+ VDEFEND, VSAFE, VWATCH, DATAMON - SET ??? ADDRESS
  6708.     AX = 6282h
  6709.     CX:DX -> ??? or 0000h:0000h
  6710.     DI = 0000h ???
  6711.          FFFFh ???
  6712.          other segment of ???
  6713. Return: BX = 0062h
  6714. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  6715.       (DATAMON only)
  6716. SeeAlso: INT 13/AH=FAh"VSAFE",INT 21/AH=FAh"VDEFEND"
  6717. --------v-2F6284BX0000-----------------------
  6718. INT 2F U - PC Tools v7.0+ DATAMON - INSTALLATION CHECK
  6719.     AX = 6284h
  6720.     BX = 0000h
  6721.     CX = 0000h
  6722. Return: AX = segment of resident code
  6723.     BX = 5555h
  6724.     CX = 5555h
  6725. --------v-2F6284BX0001-----------------------
  6726. INT 2F U - PC Tools v7.0+ DATAMON - GET ???
  6727.     AX = 6284h
  6728.     BX = 0001h
  6729.     CX = 0001h
  6730. Return: AX:BX -> ???
  6731.     CX = BX
  6732. --------v-2F6284BX0002-----------------------
  6733. INT 2F U - PC Tools v7.0+ DATAMON - GET ???
  6734.     AX = 6284h
  6735.     BX = 0002h
  6736.     CX = 0002h
  6737. Return: AX = ???
  6738.     BX = ???
  6739.     CX = AX
  6740.     DX = BX
  6741. --------v-2F6284BX0003-----------------------
  6742. INT 2F U - PC Tools v7.0+ DATAMON - SET ??? FLAGS
  6743.     AX = 6284h
  6744.     BX = 0003h
  6745.     CX = flags
  6746.         bit 12: ???
  6747.         10: ???
  6748.          5: ???
  6749.          3: ???
  6750.     DX = flags
  6751.         bit 15: ???
  6752. --------v-2F6284BX0004-----------------------
  6753. INT 2F U - PC Tools v8.0+ DATAMON - ???
  6754.     AX = 6284h
  6755.     BX = 0004h
  6756.     CX = 0004h
  6757. Return: AX = 5555h
  6758.     BX = ??? (0800h)
  6759.     CX = ??? (FCCCh)
  6760. --------V-2F6400-----------------------------
  6761. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  6762.     AX = 6400h
  6763. Return: AL = 00h not installed
  6764.          FFh installed
  6765. Program: SCRNSAV2.COM is a screen saver for PS/2s with VGA by Alan Ballard
  6766. SeeAlso: INT 10/AX=5555h
  6767. ----------2F7000------------------------------
  6768. INT 2F - License Service API - INSTALLATION CHECK
  6769.     AX = 7000h
  6770.     CX = license server index (0000h to 001Fh)
  6771. Return: AL = status
  6772.         00h not installed
  6773.         FFh installed
  6774. Notes:    The License Service API is being maintained by Microsoft but is being
  6775.       supported by a large number of companies including Apple, Banyan,
  6776.       DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association,
  6777.       and Wordperfect (not a complete list!)
  6778.     Each license service provider must search for the next free index
  6779.       slot to use
  6780. SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h
  6781. ----------2F7001------------------------------
  6782. INT 2F - License Service API - REQUEST LICENSE
  6783.     AX = 7001h
  6784.     CX = license server index (0000h to 001Fh)
  6785.     DS:DX -> SLSREQEUST structure (see below)
  6786. Return: AX = status
  6787.         0000h success
  6788.         else  provider error code
  6789.     ES:BX = provider specific handle for the license context
  6790. SeeAlso: AX=7002h,AX=7004h,AX=7005h
  6791.  
  6792. Format of SLSREQUEST structure:
  6793. Offset    Size    Description
  6794.  00h    DWORD    (return) status code
  6795.  04h    DWORD    (return) handle identifying context
  6796.  08h    DWORD    (call) address of Publisher string
  6797.  0Ch    DWORD    (call) address of Product string
  6798.  10h    DWORD    (call) address of Version string
  6799.  14h    DWORD    units required
  6800.  18h    DWORD    address of comment string
  6801.  1Ch    DWORD    address of SLSCHALLENGE structure (see below)
  6802.  
  6803. Format of SLSCHALLENGE structure:
  6804. Offset    Size    Description
  6805.  00h    DWORD    algorithm (currently always 1)
  6806.  04h    DWORD    secret to be challenged (1-255)
  6807.  08h    DWORD    size of challenge in bytes (1-255)
  6808.  0Ch  N BYTEs    challenge data
  6809. ----------2F7002------------------------------
  6810. INT 2F - License Service API - RELEASE LICENSE
  6811.     AX = 7002h
  6812.     CX = license server index (0000h to 001Fh)
  6813.     DS:DX -> SLSRELEASE structure (see below)
  6814.     ES:BX = provider specific handle for the license context
  6815. Return: AL = status
  6816.         00h not installed
  6817.         FFh installed
  6818. SeeAlso: AX=7001h,AX=7005h
  6819.  
  6820. Format of SLSRELEASE structure:
  6821. Offset    Size    Description
  6822.  00h    DWORD    handle indentifying license context
  6823.  04h    DWORD    total units consumed
  6824.  08h    DWORD    address of comment string
  6825. ----------2F7003------------------------------
  6826. INT 2F - License Service API - UPDATE
  6827.     AX = 7003h
  6828.     CX = license server index (0000h to 001Fh)
  6829.     DS:DX -> SLSUPDATE structure
  6830.     ES:BX = provider specific handle for the license context
  6831. Return: AL = status
  6832.         00h not installed
  6833.         FFh installed
  6834. SeeAlso: AX=7004h,AX=7005h
  6835.  
  6836. Format of SLSUPDATE structure:
  6837. Offset    Size    Description
  6838.  00h    DWORD    (return) status code
  6839.  04h    DWORD    (call) handle identifying license context
  6840.  08h    DWORD    (call) total units consumed
  6841.  0Ch    DWORD    additional units required
  6842.  10h    DWORD    address of comment string
  6843.  14h    DWORD    address of SLSCHALLENGE structure (see AX=7001h)
  6844. ----------2F7004------------------------------
  6845. INT 2F - License Service API - GET ERROR
  6846.     AX = 7004h
  6847.     CX = license server index (0000h to 001Fh)
  6848.     DS:DX -> SLSGETERROR structure (see below)
  6849.     ES:BX = provider specific handle for the license context
  6850. Return: AL = status
  6851.         00h not installed
  6852.         FFh installed
  6853. SeeAlso: AX=7000h,AX=7001h
  6854.  
  6855. Format of SLSGETERROR structure:
  6856. Offset    Size    Description
  6857.  00h    DWORD    (return) status code
  6858.  04h    DWORD    handle identifying license context
  6859.  08h    DWORD    error code
  6860.  0Ch    DWORD    buffer size in bytes
  6861.  10h  N BYTEs    data buffer
  6862. ----------2F7005------------------------------
  6863. INT 2F - License Service API - QUERY LICENSE
  6864.     AX = 7005h
  6865.     CX = license server index (0000h to 001Fh)
  6866.     DS:DX -> SLSQUERY structure (see below)
  6867.     ES:BX = provider specific handle for the license context
  6868. Return: AL = status
  6869.         00h not installed
  6870.         FFh installed
  6871. SeeAlso: AX=7001h,AX=7002h
  6872.  
  6873. Format of SLSQUERY structure:
  6874. Offset    Size    Description
  6875.  00h    DWORD    (return) status code
  6876.  04h    DWORD    handle identifying license context
  6877.  08h    DWORD    information index
  6878.  0Ch    DWORD    buffer size in bytes
  6879.  10h  N BYTEs    data buffer
  6880. --------d-2F7200-----------------------------
  6881. INT 2F - SRDISK v1.30 - INSTALLATION CHECK
  6882.     AX = 7200h
  6883. Return: AL = FFh if installed
  6884.         ES = segment of device driver header (see below)
  6885. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  6886.  
  6887. Format of device driver header:
  6888. Offset    Size    Description
  6889.  00h 10 BYTEs    same as standard device driver header (see INT 21/AH=52h)
  6890.  0Ah    BYTE    number of subunits (drives) supported by driver
  6891.  0Bh  3 BYTEs    signature "SRD"
  6892.  0Eh  4 BYTEs    memory type string (currently only "XMS ")
  6893.  12h  4 BYTEs    ASCII driver version string "N.NN"
  6894.  16h    BYTE    00h
  6895.  17h    BYTE    configuration format version (currently 00h)
  6896.  18h    WORD    offset of drive configuration data
  6897. --------N-2F7A00-----------------------------
  6898. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  6899.     AX = 7A00h
  6900. Return: AL = 00h not installed
  6901.        = FFh installed
  6902.         ES:DI -> FAR entry point for routines accessed exclusively
  6903.             through INT 7A in NetWare versions through 2.0a.  Call
  6904.             with same values as INT 7A
  6905. SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"Novell"
  6906. --------N-2F7A10-----------------------------
  6907. INT 2F - Novell NetWare - TBMI v2.0 - GET TBMI STATUS
  6908.     AX = 7A10h
  6909. Return: DH = major TBMI version number
  6910.     DL = minor TBMI version number
  6911.     CX = segment address of TBMI resident part
  6912.     BX = status word of TBMI (see below)
  6913. Note:    TBMI is the Task-Switched Buffer Manager Interface
  6914. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  6915.  
  6916. Bitfields for status word:
  6917.  bit 0    INT2F intercepted by TBMI
  6918.  bit 1    INT7A intercepted by TBMI
  6919.  bit 2    INT64 intercepted by TBMI
  6920.  bits 3-14 reserved or unused ???
  6921.  bit 15    outstanding task ID was detected
  6922. --------N-2F7A11-----------------------------
  6923. INT 2F - Novell NetWare - TBMI v2.0 - GET INT2F HANDLERS
  6924.     AX = 7A11h
  6925. Return: ES:BX -> old INT 2F handler
  6926.     DS:DX -> TBMI INT 2F handler
  6927. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h
  6928. --------N-2F7A12-----------------------------
  6929. INT 2F - Novell NetWare - TBMI v2.0 - GET INT64 HANDLERS
  6930.     AX = 7A12h
  6931. Return: ES:BX -> old INT 64 handler
  6932.     DS:DX -> TBMI INT 64 handler
  6933. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  6934. --------N-2F7A13-----------------------------
  6935. INT 2F - Novell NetWare - TBMI v2.0 - GET INT7A HANDLERS
  6936.     AX = 7A13h
  6937. Return: ES:BX = old INT 7A handler
  6938.     DS:DX = TBMI INT 7A handler
  6939. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  6940. --------N-2F7A14-----------------------------
  6941. INT 2F - Novell NetWare - TBMI v2.0 - GET STATISTICS
  6942.     AX = 7A14h
  6943.     CX = statistic to retrieve
  6944.         0000h available diagnostic functions???
  6945.         Return: CX = maximum available function??? (000Ch for v2.0)
  6946.         0001h buffers in use
  6947.         Return: CX = TBMI buffers currently in use
  6948.         0002h maximum buffers used
  6949.         Return: CX = maximum number of buffers ever in use
  6950.         0003h unavailable buffers
  6951.         Return: CX = count of unavailable TBMI buffers
  6952.         0004h old interrupt usage
  6953.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  6954.                 INT 64, and INT 7A
  6955.         0005h far call usage
  6956.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  6957.                 including internal accesses)
  6958.         0006h task buffering
  6959.         Return: CX = TBMI task buffering status (enabled/disabled or
  6960.                 disable/enable switch count???)
  6961.         0007h current task ID
  6962.         Return: CX = TBMI current task ID number (0000h if ???)
  6963.         0008h outstanding ID count
  6964.         Return: CX = number of outstanding TBMI IDs
  6965.         0009h configured ECBs
  6966.         Return: CX = number of TBMI Event Control Blocks configured
  6967.         000Ah configured data ECBs
  6968.         Return: CX = number of TBMI data ECBs configured
  6969.         000Bh configured sockets
  6970.         Return: CX = number of TBMI sockets configured (from NETCFG)
  6971.         000Ch current sockets
  6972.         Return: CX = number of TBMI sockets currently in use
  6973. SeeAlso: AX=7A10h
  6974. --------N-2F7A15-----------------------------
  6975. INT 2F - Novell NetWare - TBMI v2.0 - RESERVED
  6976.     AX = 7A15h to 7A1Bh
  6977. Note:    these calls perform the equivalent of an IRET
  6978. --------N-2F7A1C-----------------------------
  6979. INT 2F - Novell NetWare - TBMI v2.0 - ???
  6980.     AX = 7A1Ch
  6981.     BP = ???
  6982.     CX:DX = ???
  6983. Return: AX = 70FFh
  6984. --------N-2F7A1D-----------------------------
  6985. INT 2F - Novell NetWare - TBMI v2.0 - ???
  6986.     AX = 7A1Dh
  6987.     ???
  6988. Return: ???
  6989. --------N-2F7A1E-----------------------------
  6990. INT 2F - Novell NetWare - TBMI v2.0 - ???
  6991.     AX = 7A1Eh
  6992.     ???
  6993. Return: ???
  6994. --------N-2F7A20BX0000-----------------------
  6995. INT 2F - Novell NetWare - Advanced NetWare 4.0 DOS Requester - GET CALL ADDRESS
  6996.     AX = 7A20h
  6997.     BX = 0000h
  6998. Return: AX = 0000h on success
  6999.         ES:BX -> far call address for DOS Requester
  7000. Note:    the DOS Requester replaces the NetWare Shell (ANETx, NETx) on
  7001.       NetWare LAN's as of the release of Advanced NetWare 4.0 (1993).  It
  7002.       is backward compatible with NetWare 2.1x through 3.11 servers as
  7003.       well.  Note that there was a NetWare 4.0 in the early 1980's, which
  7004.       can cause confusion.
  7005. --------N-2F7A40-----------------------------
  7006. INT 2F - Novell NetWare - TCP/IP Protocol Stack - INSTALLATION CHECK
  7007.     AX = 7A40h
  7008. Return: AX = 7AFFh if installed
  7009.         BX = ???
  7010.             bit 0: ???
  7011.         bit 1: ???
  7012.         bits 15-2: ???
  7013.         CX = ??? (0401h)
  7014.         DX = 0000h
  7015.         ES:DI -> entry point for ???
  7016. SeeAlso: AX=7A41h
  7017. --------N-2F7A41-----------------------------
  7018. INT 2F - Novell NetWare - TCP/IP Protocol Stack - ???
  7019.     AX = 7A41h
  7020.     ES:DI -> ???
  7021. Return: AX = 7AFFh if supported
  7022.         BX = ???
  7023.         CX = ??? (0401h)
  7024.         DX = 0000h
  7025.         SI = ???
  7026.         ES:DI -> entry point for ???
  7027. SeeAlso: AX=7A40h
  7028. --------N-2F7A4DBX0001-----------------------
  7029. INT 2F - Novell Netware - ???
  7030.     AX = 7A4Dh
  7031.     BX = 0001h
  7032.     ES:DI -> ???
  7033. Return: AL = FFh if ???
  7034.         ES:DI -> ???
  7035. Note:    called by NETBIOS.EXE v3.01
  7036. --------N-2F7A80-----------------------------
  7037. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - ABNORMAL EXIT
  7038.     AX = 7A80h
  7039. Return: nothing
  7040. Notes:    called on abnormal exit of the NetWare shell to notify other Novell
  7041.       TSRs that it is unsafe to call the shell in the future.
  7042.     must be passed through so that all interested programs see the exit
  7043.     on receiving this call, IPXODI clears an internal pointer to a
  7044.       default value; Novell's NETBIOS.EXE clears its INT 21h pointer to
  7045.       0000h:0000h and stops calling it
  7046. SeeAlso: AX=7A81h
  7047. --------N-2F7A81-----------------------------
  7048. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - SET SHELL INT 21 HANDLER
  7049.     AX = 7A81h
  7050.     CX:DX -> shell's INT 21h entry point
  7051. Return: nothing
  7052. Notes:    the shell calls this function as it loads to allow interested TSRs
  7053.       and drivers to make a local copy of the shell's entry point
  7054.     must be passed through so that all interested programs see it
  7055. --------N-2F7A85-----------------------------
  7056. INT 2F C - Novell NetWare - shell 3.01 - BROADCAST INFORM
  7057.     AX = 7A85h
  7058.     CX = broadcast server number
  7059. Return: CX = 0000h if broadcast message handled by another program
  7060.     CX unchanged if broadcast not handled
  7061. --------N-2F7A90-----------------------------
  7062. INT 2F U - Novell NetWare - NETBIOS.EXE 3+ - INSTALLATION CHECK
  7063.     AX = 7A90h
  7064. Return: AL = 00h if present
  7065.         BX = ???
  7066.         CX = PSP segment of NETBIOS resident code
  7067. SeeAlso: AX=7AFEh
  7068. --------N-2F7AC1-----------------------------
  7069. INT 2F - LAN HiJack - LHR - DISABLE???
  7070.     AX = 7AC1h
  7071. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  7072.       to take over control of a workstation remotely; LHR is the program
  7073.       run on the slave workstation
  7074. SeeAlso: AX=7AC8h,AX=7AC9h,AX=7ACFh
  7075. --------N-2F7AC2-----------------------------
  7076. INT 2F - LAN HiJack - LHR - SYNCHRONIZE SHIFT STATES???
  7077.     AX = 7AC2h
  7078. Note:    sets BIOS keyboard status byte to an internal variable
  7079. SeeAlso: AX=7AC3h,AX=7ACFh
  7080. --------N-2F7AC3-----------------------------
  7081. INT 2F - LAN HiJack - LHR - CLEAR ??? FLAG
  7082.     AX = 7AC3h
  7083. SeeAlso: AX=7AC2h,AX=7ACFh
  7084. --------N-2F7AC8-----------------------------
  7085. INT 2F - LAN HiJack - LHR - ENABLE FUNCTIONS
  7086.     AX = 7AC8h
  7087.     BL = function(s) to enable (see below)
  7088. SeeAlso: AX=7AC1h,AX=7AC9h,AX=7ACFh
  7089.  
  7090. Bitfields for function(s) to enable/disable:
  7091.  bit 0    ???
  7092.  bit 1    remote keyboard enabled
  7093.  bit 2    support remote's mouse
  7094.  bits 3-7 unused
  7095. --------N-2F7AC9-----------------------------
  7096. INT 2F - LAN HiJack - LHR - DISABLE FUNCTIONS
  7097.     AX = 7AC9h
  7098.     BL = function(s) to disable (see AX=7AC8h)
  7099. SeeAlso: AX=7AC1h,AX=7AC8h
  7100. --------N-2F7ACA-----------------------------
  7101. INT 2F - LAN HiJack - LHJ - ???
  7102.     AX = 7ACAh
  7103.     BL = ???
  7104. Return: ???
  7105. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  7106.       to take over control of a workstation remotely; LHJ is the program
  7107.       run on the controlling workstation
  7108. --------N-2F7ACB-----------------------------
  7109. INT 2F - LAN HiJack - LHJ - ???
  7110.     AX = 7ACBh
  7111.     BX = ???
  7112. Return: ???
  7113. Note:    this function appears to be related to the keyboard
  7114. SeeAlso: AX=7ACCh
  7115. --------N-2F7ACC-----------------------------
  7116. INT 2F - LAN HiJack - LHJ - ???
  7117.     AX = 7ACCh
  7118.     BX = ???
  7119. Return: ???
  7120. Note:    this function appears to be related to the mouse
  7121. SeeAlso: AX=7ACBh
  7122. --------N-2F7ACFBX0000-----------------------
  7123. INT 2F - LAN HiJack - LHR - INSTALLATION CHECK
  7124.     AX = 7ACFh
  7125.     BX = 0000h
  7126. Return: BX = segment of resident code if installed
  7127. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  7128.       to take over control of a workstation remotely; LHR is the program
  7129.       run on the slave workstation
  7130. --------N-2F7AF0-----------------------------
  7131. INT 2F - Novell Netware - DOSNP.EXE v1.30G - INSTALLATION CHECK
  7132.     AX = 7AF0h
  7133. Return: AL = FFh if present
  7134.         ES = 7AF0h
  7135.         CX = PSP segment of resident code
  7136. --------N-2F7AFE-----------------------------
  7137. INT 2F - Novell NetWare - DOSNP.EXE - INSTALLATION CHECK
  7138.     AX = 7AFEh
  7139. Return: AL = FFh if present
  7140.         ES = (data???) segment of DOSNP
  7141. Program: DOSNP.EXE provides "named pipes" support for DOS workstations running
  7142.        NetWare
  7143. Note:    the NetWare shell calls this function and refuses to load if DOSNP is
  7144.       present
  7145. SeeAlso: AX=7A90h
  7146. --------N-2F7AFFBX0000-----------------------
  7147. INT 2F - Novell NetWare - TBMI v2.0 - INSTALLATION CHECK???
  7148.     AX = 7AFFh
  7149.     BX = 0000h
  7150.     CX = 4E65h ("Ne")
  7151.     DX = 7457h ("tW")
  7152.     ES:DI -> IPX/SPX special handler (XMS/EMS ???)
  7153. Return: AL = FFh if installed
  7154.         CX = configured sockets (14h)
  7155.         DS:SI -> data table ???
  7156.         ES:DI -> IPX far call handler
  7157. Note:    for IPX/SPX this call reportedly returns DS:DI pointing to the table
  7158.       of pointers to service events queue head and tail
  7159. SeeAlso: AX=7AFFh/BX=0001h
  7160. --------N-2F7AFFBX0001-----------------------
  7161. INT 2F - Novell NetWare - TBMI v2.0, shell v3.01d - INSTALLATION CHECK???
  7162.     AX = 7AFFh
  7163.     BX = 0001h
  7164.     CX = 4E65h ("Ne")
  7165.     DX = 7457h ("tW")
  7166. Return: AL = FFh if installed
  7167.         CX = ???  (8000h)
  7168.         SI = ??? (or -> ???) (0002h)
  7169.         ES:DI -> IPX far call handler
  7170.         ES:DX -> 6-byte data area ???
  7171. SeeAlso: AX=7AFFh/BX=0000h
  7172. --------d-2F7F00-----------------------------
  7173. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - INSTALLATION CHECK
  7174.     AX = 7F00h
  7175. Return: AL = FFh if installed
  7176. SeeAlso: AX=7F01h,AX=7F02h,AX=7F03h
  7177. --------d-2F7F01-----------------------------
  7178. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO COMMAND
  7179.     AX = 7F01h
  7180.     DS:DX -> command record (see below)
  7181. Return: AL = status
  7182.         00h successful
  7183.         else error code
  7184. SeeAlso: AX=7F00h,AX=7F02h,INT 11/AH=FFh"SDLP",INT 21/AX=4402h"ASPI"
  7185. SeeAlso: INT 4F/AX=8100h
  7186.  
  7187. Format of command record:
  7188. Offset    Size    Description
  7189.  00h    BYTE    ID
  7190.  01h 10 BYTEs    CDB (Command Descriptor Block) for operation
  7191.  0Bh    WORD    segment of buffer
  7192.  0Dh    WORD    offset of buffer
  7193.  0Fh    BYTE    status
  7194.  10h    BYTE    sense
  7195.  12h    WORD    count
  7196. --------d-2F7F02-----------------------------
  7197. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO RESET
  7198.     AX = 7F02h
  7199. SeeAlso: AX=7F00h,AX=7F01h
  7200. --------d-2F7F03-----------------------------
  7201. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - UNINSTALL
  7202.     AX = 7F03h
  7203. Return: AL = status
  7204.         00h successful
  7205.         01h unable to uninstall
  7206. SeeAlso: AX=7F00h
  7207. ----------2F7F24-----------------------------
  7208. INT 2F - Multiplex - ???
  7209.     AX = 7F24h
  7210.     ???
  7211. Return: ???
  7212. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  7213. ----------2F7F26-----------------------------
  7214. INT 2F - Multiplex - ???
  7215.     AX = 7F26h
  7216.     ???
  7217. Return: ???
  7218. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  7219. --------N-2F8000-----------------------------
  7220. INT 2F - EASY-NET - INSTALLATION CHECK
  7221.     AX = 8000h
  7222. Return: AL = 00h not installed
  7223.          FFh installed
  7224. Program: EASY-NET is a shareware two-machine serial-port network
  7225. --------N-2F8000-----------------------------
  7226. INT 2F - Nanosoft, Inc. TurboNET server - INSTALLATION CHECK
  7227.     AX = 8000h
  7228. Return: AL = FFh if installed
  7229.         BX = CS of resident code
  7230.         CX = ??? (03FCh)
  7231. Program: TurboNET is a NetBIOS-based file redirector and server; a
  7232.       demonstration version may be downloaded from Nanosoft's BBS
  7233. SeeAlso: AX=8100h
  7234. ----------2F8000-----------------------------
  7235. INT 2F - ASCII v2.00 - INSTALLATION CHECK
  7236.     AX = 8000h
  7237.     DS:SI -> 4-byte signature (11h 43h 53h 10h)
  7238. Return: AL = status
  7239.         01h installed, but signature did not match
  7240.         FFh installed, signature matches
  7241.             ES:DI -> resident copy of signature (may be followed by data)
  7242. Program: ASCII is a popup ASCII table by Nick Zaikin, Jr.
  7243. Note:    the interface used by this program appears to be a general-purpose
  7244.       interface which may be shared by multiple programs, so other programs
  7245.       may also support this call with differing signatures
  7246. SeeAlso: AX=8001h"ASCII",AX=8002h"ASCII"
  7247. --------F-2F8000DX0000-----------------------
  7248. INT 2F - FaxBIOS interface - INSTALLATION CHECK
  7249.     AX = 8000h
  7250.     DX = 0000h
  7251.     DI = 0000h
  7252. Return: AL = FFh if installed
  7253.     DX:DI -> signature "FaxBiosjpc"
  7254. Note:    FaxBIOS may use any multiplex number from 80h through FFh; to determine
  7255.       whether it is installed, it is necessary to poll all multiplex
  7256.       numbers for one which returns the above signature
  7257. SeeAlso: AH=2Ah,AX=80FBh
  7258. --------N-2F8001-----------------------------
  7259. INT 2F - Nanosoft, Inc. TurboNET server - ???
  7260.     AX = 8001h
  7261.     DS:SI -> 16-byte buffer for ???
  7262. Return: AH = status
  7263.         00h successful
  7264.         01h error
  7265. Note:    makes NetBIOS calls
  7266. ----------2F8001-----------------------------
  7267. INT 2F - ASCII v2.00 - INSTALLATION VERIFICATION
  7268.     AX = 8001h
  7269.     DS:SI -> ASCIZ signature string "ASCII 2.00 by Nick Zaikin Jr."
  7270. Return: BX = 0000h if signature did not match
  7271.        = instance number??? if signature matched
  7272.            ES:DI -> ??? (same as returned by AX=8000h)
  7273. Note:    the interface used by this program appears to be a general-purpose
  7274.       interface which may be shared by multiple programs, so other programs
  7275.       may also support this call with differing signatures
  7276. SeeAlso: AX=8000h"ASCII",AX=8002h"ASCII"
  7277. ----------2F8002-----------------------------
  7278. INT 2F - ASCII v2.00 - ???
  7279.     AX = 8002h
  7280.     BX = instance number??? (value returned by AX=8001h)
  7281. Return: ES:DI -> ??? (same as returned by AX=8000h) if instance number matches
  7282.     call chained if instance number did not match
  7283. SeeAlso: AX=8000h"ASCII",AX=8001h"ASCII"
  7284. --------F-2F80FB-----------------------------
  7285. INT 2F - FaxBIOS interface - COMMAND SUBMISSION
  7286.     AX = 80FBh
  7287.     BX = function number (see below)
  7288.     DX:DI -> command buffer (see below)
  7289. Return: AL = FFh if submitted OK
  7290.     CX = result code (see below)
  7291. Note:    FaxBIOS may use any multiplex number from 80h through FFh
  7292. SeeAlso: AX=8000h"FaxBIOS",AX=CBDDh
  7293.  
  7294. Values for function number:
  7295.  0001h    SYS_LOGIN
  7296.  0002h    SYS_LOGOUT
  7297.  0003h    SYS_GET_FAXAPP_INFO
  7298.  0004h    STAT_IO_GET
  7299.  0005h    STAT_FAXBIOS_GET
  7300.  0006h    PDIR_OPEN
  7301.  0007h    PDIR_CLOSE
  7302.  0008h    PDIR_READ_PERSON
  7303.  0009h    PDIR_PARTIAL_READ
  7304.  000Ah    PDIR_READ_GROUP
  7305.  000Bh    PDIR_READ_MEMBER_LIST
  7306.  000Ch    PDIR_WRITE_PERSON
  7307.  000Dh    PDIR_WRITE_GROUP
  7308.  000Eh    PDIR_DELETE_PERSON
  7309.  000Fh    PDIR_DELETE_GROUP
  7310.  0010h    PDIR_READ_GROUP_LIST
  7311.  0011h    PDIR_IN_GROUP
  7312.  0012h    PDIR_OUT_GROUP
  7313.  0013h    SCHED_OPEN
  7314.  0014h    SCHED_ADD_DEST
  7315.  0015h    SCHED_ADD_FILE
  7316.  0016h    SCHED_SET_PARAMS
  7317.  0017h    SCHED_CANCEL
  7318.  0018h    SCHED_CLOSE
  7319.  0019h    SLOG_OPEN
  7320.  001Ah    SLOG_CLOSE
  7321.  001Bh    SLOG_SHORT_ENV_STAT
  7322.  001Ch    SLOG_LONG_ENV_STAT
  7323.  001Dh    SLOG_DEST_STAT
  7324.  001Eh    SLOG_FILE_STAT
  7325.  001Fh    SLOG_CANCEL_ENV
  7326.  0020h    RLOG_OPEN
  7327.  0021h    RLOG_CLOSE
  7328.  0022h    RLOG_READ
  7329.  0023h    GRAPH_GET_FILE_TYPE
  7330.  0024h    GRAPH_EXPORT_FILE
  7331.  0025h    GRAPH_GET_LAYOUT_INFO
  7332.  0026h    GRAPH_CREATE_FILE
  7333.  0027h    GRAPH_CLOSE_FILE
  7334.  0028h    GRAPH_CREATE_PAGE
  7335.  0029h    GRAPH_WRITE
  7336.  002Ah    GRAPH_END_PAGE
  7337.  002Bh    GRAPH_OPEN_FILE
  7338.  002Ch    GRAPH_GOTO_PAGE
  7339.  002Dh    GRAPH_READ
  7340.  002Eh    IOCTL_GET
  7341.  002Fh    IOCTL_SET
  7342.  0030h    IOCTL_ANSWER_FAX
  7343.  0031h    IOCTL_DIAL
  7344.  
  7345. Values for result code:
  7346.  0000h    successful
  7347.  0001h    not prepared or servicing another client (busy)
  7348.  0002h    call failed due to sharing (LOCKED)
  7349.  0003h    logged-in client limit reached (FULL)
  7350.  0004h    transport denied (TRANSPORT_DENIED)
  7351.  0005h    not implemented (NOT_IMPLEMENTED)
  7352.  0006h    aborted while in progress (ABORTED)
  7353.  0007h    permissions denied (PERMISSION_DENIED)
  7354.  0008h    requested data is no longer valid (NO_LONGER_VALID)
  7355.  0080h    unspecified system error occurred
  7356.  0081h    an internal file was not found
  7357.  0082h    an internal file could not be created
  7358.  0083h    an internal file could not be opened
  7359.  0084h    an internal file could not be closed
  7360.  0085h    error occurred writing to an internal file
  7361.  0086h    error occurred reading from an internal file
  7362.  0087h    bad or corrupted file encountered
  7363.  0088h    an access violation occurred
  7364.  0089h    an internal file is empty
  7365.  008Ah    insufficient memory to process request
  7366.  008Bh    FaxBIOS was unable to issue a handle
  7367.  008Ch    an error internal to FaxBIOS occurred
  7368.  008Dh    no room on disk
  7369.  0100h    unspecified error accessing client file
  7370.  0101h    file not found
  7371.  0102h    creation fault
  7372.  0103h    open fault
  7373.  0104h    close fault
  7374.  0105h    write fault
  7375.  0106h    read fault
  7376.  0107h    file corrupted
  7377.  0108h    access violation
  7378.  0109h    empty file
  7379.  0200h    unspecified argument error
  7380.  0201h    bad function
  7381.  0202h    bad option
  7382.  0203h    bad structure size
  7383.  0204h    bad buffer size
  7384.  0205h    bad client ID
  7385.  0300h    unspecified error with token
  7386.  0301h    cover sheet token was invalid
  7387.  0302h    logo token was invalid
  7388.  0303h    signature token was invalid
  7389.  0304h    font token was invalid
  7390.  0305h    phone directory token was invalid
  7391.  0306h    outbound route token was invalid
  7392.  0307h    priority token was invalid
  7393.  0308h    sort token was invalid
  7394.  0309h    billing token was invalid
  7395.  0400h    unspecified handle error
  7396.  0401h    bad Phone Directory handle
  7397.  0402h    bad scheduling handle
  7398.  0403h    bad read send log handle
  7399.  0404h    bad read receive log handle
  7400.  0405h    bad graphics handle
  7401.  0500h    data passed in structure was invalid
  7402.  0501h    name field given is invalid
  7403.  0502h    phone number given is invalid
  7404.  0503h    poll code submitted is invalid
  7405.  0504h    file type constant was invalid
  7406.  0505h    BFT constant not defined or supported
  7407.  0506h    resolution not defined or supported
  7408.  0507h    page length not defined or supported
  7409.  0508h    page width not defined or supported
  7410.  0509h    date & time requested are ridiculous
  7411.  050Ah    Subject text was not an ASCIIZ string
  7412.  050Bh    From text was not an ASCIIZ string
  7413.  050Ch    requested envelope ID was not found
  7414.  050Dh    requested envelope ID is not valid
  7415.  050Eh    envelope requested was not found
  7416.  050Fh    destination index is out of range
  7417.  0510h    file index is out of range
  7418.  0511h    index into receive log is out of range
  7419.  0512h    file name specified was incomplete or invalid
  7420.  0513h    page selected was out of range
  7421.  0514h    bit width more than byte width 
  7422.  0515h    mode for open is not defined
  7423.  0516h    person index is out of range
  7424.  0517h    person ID is out of range
  7425.  0518h    group index out of range or invalid
  7426.  0519h    group ID out of range or invalid
  7427.  051Ah    range of indices to read is invalid
  7428.  051Bh    group name given is invalid
  7429.  051Ch    field_to_use is badly specified
  7430.  051Dh    predicate invalid for field specified
  7431.  0600h    unspecified client procedure error
  7432.  0601h    device of interest is not present
  7433.  0602h    device of interest has been removed
  7434.  0603h    device of interest is not responding
  7435.  0604h    device of interest is disabled
  7436.  0605h    could not dial because device was in use
  7437.  0606h    maximum destination limit exceeded
  7438.  0607h    maximum file limit exceeded
  7439.  0608h    scheduling closed with no destination
  7440.  0609h    scheduling closed with no files or poll
  7441.  060Ah    scheduling closed with no parameters specified
  7442.  060Bh    file type specified does not match file
  7443.  060Ch    file type specified is not supported
  7444.  060Dh    file submitted is not exportable
  7445.  060Eh    file type specified is not imageable
  7446.  060Fh    error converting file
  7447.  0610h    envelope could not be cancelled
  7448.  0611h    Phone Directory is full
  7449.  0612h    record is already in the Phone Directory
  7450.  0613h    selected group in Phone Directory is full
  7451.  0614h    person is already in the group
  7452.  0615h    person is not in the group & cannot be removed
  7453.  0616h    a graphics file to be created already exists
  7454.  0617h    a grphics file to be read is empty
  7455.  0618h    GRAPH_CREATE_PAGE called before GRAPH_END_PAGE
  7456.  0619h    graph read or write attempted without goto or create
  7457.  061Ah    graph page contains no data
  7458.  061Bh    Phone Directory is already open for this client
  7459.  061Ch    schedule log is already open for this client
  7460.  061Dh    receive log is aready open for this client
  7461.  061Eh    Phone Directory function requires write mode
  7462.  0800h    denied exclusive use of the API
  7463.  
  7464. Format of SYS_LOGIN command buffer:
  7465. Offset    Size    Description
  7466.  00h    WORD    structure size
  7467.  02h    WORD    function number
  7468.  04h    WORD    return code
  7469.  06h    WORD    client ID
  7470.  08h    WORD    API Major Version
  7471.  0Ah    WORD    API Minor Version
  7472.  0Ch    DWORD    reserved for manufacturer's use
  7473.  10h 22 BYTEs    manufacturer's ID
  7474.  26h    WORD    highest possible device number
  7475.  28h    WORD    maximum destinations per envelope
  7476.  2Ah    WORD    maximum files per envelope
  7477.  2Ch    WORD    FaxBIOS capabilities (see below)
  7478.  2Eh    DWORD    T.30 capabilities (see below)
  7479.  32h    WORD    IPC handle
  7480.  34h    DWORD    amount of memory needed to load
  7481.  38h    WORD    scope (00h for public, nonzero for private)
  7482.  3Ah  6 BYTEs    future expansion
  7483.  40h    WORD    structure size
  7484.  
  7485. Bitfields for FaxBIOS capabilities:
  7486.  bit 0    transmit supported
  7487.  bit 1    receive supported
  7488.  bit 2    IOCTL supported
  7489.  bit 3    IOCTL_DIAL supported
  7490.  bit 4    IOCTL_ANSWER_FAX supported
  7491.  bit 5    manual transmit supported
  7492.  bit 6    optional phone services supported
  7493.  bit 7    canonical phone objects
  7494.  bit 8    seam with next supported
  7495.  
  7496. Bitfields for T.30 capabilities:
  7497.  bit 0    low vertical resolution (minimum)
  7498.  bit 1    high vertical resolution
  7499.  bit 2    page width 107mm (4.21 in)
  7500.  bit 3    page width 151mm (5.91 in)
  7501.  bit 4    page width 215mm (8.46 in) (minimum)
  7502.  bit 5    page width 255mm (10.04 in)
  7503.  bit 6    page width 303mm (11.93 in)
  7504.  bit 7    unused
  7505.  bit 8    page length 297mm (11.69 in) (minimum)
  7506.  bit 9    page length 364mm (14.33 in)
  7507.  bit 10    page length 279mm (11 in)
  7508.  bit 11    page length unlimited
  7509.  bit 12    Group 4 resolution 300x300
  7510.  bit 13    Group 4 resolution 400x400
  7511.  bit 14    able to respond to poll from remote
  7512.  bit 15    able to poll remote
  7513.  bit 16    binary file transfer supported
  7514.  
  7515. Format of SYS_LOGOUT command buffer:
  7516. Offset    Size    Description
  7517.  00h    WORD    structure size
  7518.  02h    WORD    function number
  7519.  04h    WORD    return code
  7520.  06h    WORD    client ID
  7521.  08h    DWORD    client tag (for client's internal use)
  7522.  0Ch  6 BYTEs    future expansion
  7523.  12h    WORD    structure size
  7524.  
  7525. Format of SYS_GET_FAXAPP_INFO command buffer:
  7526. Offset    Size    Description
  7527.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7528.  0Ch 80 BYTEs    FaxBIOS data
  7529.  5Ch 80 BYTEs    default cover
  7530.  ACh 80 BYTEs    default logo
  7531.  FCh 80 BYTEs    default signature
  7532. 14Ch 80 BYTEs    default font 10
  7533. 19Ch 80 BYTEs    default font 165
  7534. 1ECh 80 BYTEs    default user font
  7535. 23Ch 80 BYTEs    default Pdir
  7536. 28Ch 80 BYTEs    default sort
  7537. 2DCh 10 BYTEs    default bill
  7538. 2E6h 10 BYTEs    default route
  7539. 2F0h 40 BYTEs    default cover sheet form
  7540. 318h 34 BYTEs    valid dial characters
  7541. 33Ah  6 BYTEs    local country code
  7542. 340h  6 BYTEs    local city or area code
  7543. 346h  6 BYTEs    future expansion
  7544. 34Ch    WORD    structure size
  7545.  
  7546. Format of STAT_IO_GET command buffer:
  7547. Offset    Size    Description
  7548.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7549.  0Ch    WORD    device number
  7550.  0Eh    WORD    current activity
  7551.  10h    WORD    number of rings (if ringing)
  7552.  12h    WORD    number of fascimiles transmitted
  7553.  14h    WORD    number of fascimiles received
  7554.  16h    WORD    status of last transmission
  7555.  18h    WORD    envelope number of last transmission
  7556.  1Ah    WORD    index of last destination in envelope
  7557.  1Ch    WORD    status of last reception
  7558.  1Eh    WORD    current page (if session in progress)
  7559.  20h 80 BYTEs    current file
  7560.  70h104 BYTEs    remote number
  7561.  D8h 20 BYTEs    last name
  7562.  ECh 20 BYTEs    first name
  7563. 100h 32 BYTEs    company name
  7564. 120h 32 BYTEs    notes
  7565. 140h    WORD    current envelope ID (if sending)
  7566. 142h    WORD    total pages in transmission (if sending)
  7567. 144h  6 BYTEs    future expansion
  7568. 14h    WORD    structure size
  7569.  
  7570. Format of STAT_FAXBIOS_GET command buffer:
  7571. Offset    Size    Description
  7572.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7573.  0Ch    WORD    status ID
  7574.  0Eh    WORD    currenty FaxBIOS function number
  7575.  10h    WORD    current Client ID being serviced
  7576.  12h    WORD    number of things to do
  7577.  14h    WORD    number of them done
  7578.  16h    WORD    number of pages to do (if any)
  7579.  18h    WORD    number of them done
  7580.  1Ah    WORD    number of files to do
  7581.  1Ch    WORD    number of them done
  7582.  1Eh 80 BYTEs    current File
  7583.  6Eh    WORD    0 if all devices are idle
  7584.  70h    WORD    number of fascimiles transmitted
  7585.  72h    WORD    number of fascimiles received
  7586.  74h    WORD    status of last transmission in system
  7587.  76h    WORD    envelope ID of last transmission
  7588.  78h    WORD    index of last destination in envelope
  7589.  7Ah    WORD    status of last reception in system
  7590.  7Ch    DWORD    time of next transmission
  7591.  80h  6 BYTEs    future expansion
  7592.  86h    WORD    structure size
  7593.  
  7594. Format of PDIR_OPEN command buffer:
  7595. Offset    Size    Description
  7596.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7597.  0Ch 80 BYTEs    Phone Directory token
  7598.  5Ch 80 BYTEs    sort order token
  7599.  ACh    WORD    open Mode (0 = read, 1 = write)
  7600.  AEh    WORD    Phone Directory handle
  7601.  B0h    WORD    number of people
  7602.  B2h    WORD    number of groups
  7603.  B4h    WORD    bitmap of fields supported by partial read
  7604.  B6h  6 BYTEs    future expansion
  7605.  BCh    WORD    structure size
  7606.  
  7607. Format of PDIR_CLOSE command buffer:
  7608. Offset    Size    Description
  7609.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7610.  0Ch    WORD    Phone Directory handle
  7611.  0Eh  6 BYTEs    future expansion
  7612.  14h    WORD    structure size
  7613.  
  7614. Format of PDIR_READ_PERSON command buffer:
  7615. Offset    Size    Description
  7616.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7617.  0Ch    WORD    Phone Directory handle
  7618.  0Eh    WORD    retrieve by index
  7619.  10h    WORD    person ID or index
  7620.  12h    WORD    how many groups person is in
  7621.  14h    WORD    person ID
  7622.  16h 20 BYTEs    last name
  7623.  2Ah 20 BYTEs    first name
  7624.  3Eh 32 BYTEs    company
  7625.  5Eh 32 BYTEs    notes
  7626.  7Eh  6 BYTEs    FAX country code
  7627.  84h  6 BYTEs    FAX city/area code
  7628.  8Ah 14 BYTEs    FAX local number
  7629.  98h 14 BYTEs    FAX extension
  7630.  A6h 24 BYTEs    reserved
  7631.  BEh  6 BYTEs    voice country code
  7632.  C4h  6 BYTEs    voice city/area code
  7633.  CAh 14 BYTEs    voice local number
  7634.  D8h 14 BYTEs    voice extension
  7635.  E6h 24 BYTEs    reserved
  7636.  FEh 10 BYTEs    outbound routing information
  7637. 108h 10 BYTEs    billing information, credit card etc
  7638. 112h    DWORD    remote FAX capabilities
  7639. 116h 21 BYTEs    T.30 poll code of FAX number
  7640. 12Bh 15 BYTEs    reserved
  7641. 13Ah  6 BYTEs    future expansion
  7642. 140h    WORD    structure size
  7643.  
  7644. Format of SCHED_OPEN, SCHED_CANCEL command buffer:
  7645. Offset    Size    Description
  7646.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7647.  0Ch    WORD    scheduler handle
  7648.  0Eh  6 BYTEs    future expansion
  7649.  14h    WORD    structure size
  7650.  
  7651. Format of SCHED_ADD_DEST command buffer:
  7652. Offset    Size    Description
  7653.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7654.  0Ch    WORD    schedule handle
  7655.  0Eh    WORD    device number if manual send wanted
  7656.  10h    WORD    non-zero if poll desired
  7657.  12h    WORD    person ID
  7658.  14h 20 BYTEs    last name
  7659.  28h 20 BYTEs    first name
  7660.  3Ch 32 BYTEs    company
  7661.  5Ch 32 BYTEs    notes
  7662.  7Ch  6 BYTEs    FAX country code
  7663.  82h  6 BYTEs    FAX city/area code
  7664.  88h 14 BYTEs    FAX local number
  7665.  96h 14 BYTEs    FAX extension
  7666.  A4h 24 BYTEs    reserved
  7667.  BCh  6 BYTEs    voice country code
  7668.  C2h  6 BYTEs    voice city/area code
  7669.  C8h 14 BYTEs    voice local number
  7670.  D6h 14 BYTEs    voice extension
  7671.  E4h 24 BYTEs    reserved
  7672.  FCh 10 BYTEs    outbound routing information
  7673. 106h 10 BYTEs    billing information, credit card etc
  7674. 110h    DWORD    remote FAX capabilities
  7675. 114h 21 BYTEs    T.30 poll code of FAX number
  7676. 129h 15 BYTEs    reserved
  7677. 138h  6 BYTEs    future expansion
  7678. 13Eh    WORD    structure size
  7679.  
  7680. Format of SCHED_ADD_FILE command buffer:
  7681. Offset    Size    Description
  7682.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7683.  0Ch    WORD    schedule handle
  7684.  0Eh    WORD    file type
  7685.         0000h unidentified
  7686.         0001h native file format
  7687.         0002h ASCII
  7688.         0003h FaxBIOS Tiff Class F
  7689.  10h 80 BYTEs    file name
  7690.  60h 80 BYTEs    font token
  7691.  B0h    WORD    conversion options bitmap
  7692.  B2h    WORD    resolution
  7693.         0000h standard 98 lines per inch, 204 dpi
  7694.         0001h fine 196 lines per inch, 204 dpi
  7695.         0002h Group4 300 dpi
  7696.         0003h Group4 400 dpi
  7697.  B4h    WORD    page length
  7698.         0000h 279 mm (11 in)
  7699.         0001h 297 mm (11.69 in)
  7700.         0002h 364 mm (14.33 in)
  7701.         0003h unlimited
  7702.  B6h    WORD    page width
  7703.         0000h 215 mm (8.46 in)
  7704.         0001h 255 mm (10.04 in)
  7705.         0002h 303 mm (11.93 in)
  7706.         0003h 151 mm (5.91 in)
  7707.         0004h 107 mm (4.21 in)
  7708.  B8h    WORD    binary file transfer specification
  7709.         0000h only as FAX
  7710.         0001h only as file (for non-faxable files)
  7711.         0002h as file when possible else FAX
  7712.  BAh    WORD    seam flag (nonzero for seam with next)
  7713.  BCh    WORD    delete flag (nonzero to delete when done)
  7714.  BEh  6 BYTEs    future expansion
  7715.  C4h    WORD    structure size
  7716.  
  7717. Format of SCHED_SET_PARAMS command buffer:
  7718. Offset    Size    Description
  7719.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7720.  0Ch    WORD    scheduler handle
  7721.  0Eh    DWORD    time to send
  7722.  10h 10 BYTEs    priority token
  7723.  1Ch 80 BYTEs    logo file token
  7724.  6Ch 80 BYTEs    signature file token
  7725.  BCh 80 BYTEs    cover page token
  7726. 10Ch 40 BYTEs    Subject text
  7727. 134h 40 BYTEs    From text
  7728. 15Ch    WORD    user ID
  7729. 15Eh  6 BYTEs    future expansion
  7730. 164h    WORD    structure size
  7731.  
  7732. Format of SCHED_CLOSE command buffer:
  7733. Offset    Size    Description
  7734.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7735.  0Ch    WORD    scheduler handle
  7736.  0Eh    WORD    envelope ID generated
  7737.  10h  6 BYTEs    future expansion
  7738.  16h    WORD    structure size
  7739.  
  7740. Format of SLOG_OPEN, SLOG_CLOSE, RLOG_OPEN, RLOG_CLOSE command buffer:
  7741. Offset    Size    Description
  7742.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7743.  0Ch    WORD    log handle
  7744.  0Eh    WORD    number of entries 
  7745.  10h  6 BYTEs    future expansion
  7746.  16h    WORD    structure size
  7747.  
  7748. Format of GRAPH_GET_FILE_TYPE command buffer:
  7749. Offset    Size    Description
  7750.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7751.  0Ch 80 BYTEs    filename
  7752.  5Ch    WORD    file type
  7753.         0000h unidentified
  7754.         0001h native file format
  7755.         0002h ASCII
  7756.         0003h FaxBIOS Tiff Class F
  7757.  5Eh    WORD    bitmap of supported capabilities
  7758.  60h  6 BYTEs    future expansion
  7759.  66h    WORD    structure size
  7760.  
  7761. Format of GRAPH_CREATE_FILE command buffer:
  7762. Offset    Size    Description
  7763.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7764.  0Ch 80 BYTEs    filename
  7765.  5Ch    WORD    graph handle
  7766.  5Eh  6 BYTEs    future expansion
  7767.  64h    WORD    structure size
  7768.  
  7769. Format of GRAPH_CLOSE_FILE, GRAPH_END_PAGE command buffer:
  7770. Offset    Size    Description
  7771.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7772.  0Ch    WORD    graph handle
  7773.  0Eh  6 BYTEs    future expansion
  7774.  14h    WORD    structure size
  7775.  
  7776. Format of GRAPH_CREATE_PAGE command buffer:
  7777. Offset    Size    Description
  7778.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7779.  0Ch    WORD    graph handle
  7780.  0Eh    WORD    resolution
  7781.  10h    WORD    page width
  7782.  12h  6 BYTEs    future expansion
  7783.  18h    WORD    structure size
  7784.  
  7785. Format of GRAPH_WRITE_PAGE command buffer:
  7786. Offset    Size    Description
  7787.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7788.  0Ch    WORD    graph handle
  7789.  0Eh    DWORD    pointer to storage for image
  7790.  12h    WORD    band height in lines
  7791.  14h    WORD    width of page image in bytes
  7792.  16h    WORD    facsimile page width constant
  7793.  18h    WORD    width of page image in bits
  7794.  1Ah    WORD    number of bytes actually processed
  7795.  1Ch  6 BYTEs    future expansion
  7796.  22h    WORD    structure size
  7797.  
  7798. Format of GRAPH_OPEN_FILE command buffer:
  7799. Offset    Size    Description
  7800.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7801.  0Ch 80 BYTEs    filename
  7802.  5Ch    WORD    file type
  7803.  5Eh    WORD    graph handle
  7804.  60h    WORD    number of pages
  7805.  62h  6 BYTEs    future expansion
  7806.  68h    WORD    structure size
  7807.  
  7808. Format of GRAPH_GOTO_PAGE command buffer:
  7809. Offset    Size    Description
  7810.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7811.  0Ch    WORD    graph handle
  7812.  0Eh    WORD    page number
  7813.  10h    WORD    vertical resolution
  7814.  12h    WORD    page width
  7815.  14h    DWORD    page length
  7816.  18h  6 BYTEs    future expansion
  7817.  1Eh    WORD    structure size
  7818.  
  7819. Format of GRAPH_READ_PAGE command buffer:
  7820. Offset    Size    Description
  7821.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7822.  0Ch    WORD    graph handle
  7823.  0Eh    DWORD    pointer to storage for image
  7824.  12h    WORD    band height in lines
  7825.  14h    WORD    width of page image in bytes
  7826.  16h    WORD    facsimile page width constant
  7827.  18h    WORD    width of page image in bits
  7828.  1Ah    WORD    number of bytes actually processed
  7829.  1Ch  6 BYTEs    future expansion
  7830.  22h    WORD    structure size
  7831.  
  7832. Format of IOCTL_ANSWER_FAX command buffer:
  7833. Offset    Size    Description
  7834.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7835.  0Ch    WORD    device number
  7836.  0Eh  6 BYTEs    future expansion
  7837.  14h    WORD    structure size
  7838.  
  7839. Format of IOCTL_DIAL command buffer:
  7840. Offset    Size    Description
  7841.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7842.  0Ch    WORD    device number
  7843.  0Eh  6 BYTEs    country code
  7844.  14h  6 BYTEs    city or area code
  7845.  1Ah 14 BYTEs    local number
  7846.  28h 14 BYTEs    extension
  7847.  36h 14 BYTEs    reserved
  7848.  4Eh  6 BYTEs    future expansion
  7849.  54h    WORD    structure size
  7850. --------N-2F8100-----------------------------
  7851. INT 2F U - Nanosoft, Inc. TurboNET redirector - INSTALLATION CHECK
  7852.     AX = 8100h
  7853. Return: AL = FFh if installed
  7854. Program: TurboNET is a NetBIOS-based file redirector and server; a
  7855.       demonstration version may be downloaded from Nanosoft's BBS
  7856. SeeAlso: AX=8000h"TurboNET"
  7857. --------N-2F8101-----------------------------
  7858. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7859.     AX = 8101h
  7860. Return: AL = ???
  7861.     DL = ???
  7862. --------N-2F8102-----------------------------
  7863. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7864.     AX = 8102h
  7865. Return: AL = ???
  7866.     DL = ???
  7867. --------N-2F8103-----------------------------
  7868. INT 2F U - Nanosoft, Inc. TurboNET redirector - GET MACHINE NAME???
  7869.     AX = 8103h
  7870.     ES:DI -> 17-byte buffer
  7871. Return: buffer filled
  7872. --------N-2F8104-----------------------------
  7873. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7874.     AX = 8104h
  7875.     BL = ???
  7876.     BH = ???
  7877.     CX = ???
  7878.     DX = ???
  7879.     DS:SI -> 16-byte buffer containing ???
  7880. Return: AL = 00h ???
  7881. --------N-2F8105-----------------------------
  7882. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7883.     AX = 8105h
  7884.     CX = ??? (don't change current value if 0000h)
  7885.     DX = ??? (don't change current value if 0000h)
  7886. Return: AL = 00h successful
  7887. --------N-2F82-------------------------------
  7888. INT 2F U - Nanosoft, Inc. TurboNET - ???
  7889.     AH = 82h
  7890.     ???
  7891. Return: ???
  7892. Note:    called by TNR.EXE, the TurboNET redirector configuration program
  7893. SeeAlso: AX=8100h
  7894. --------s-2F8200-----------------------------
  7895. INT 2F - RESPLAY - SAMPLE/PLAYBACK
  7896.     AX = 8200h
  7897.     DX:DI -> start of sample space
  7898.     CX:BX = length in bytes
  7899. Return: AX = status
  7900.         1000h successful
  7901.         2000h not initialized (see AX=8210h)
  7902.         other RESPLAY not installed
  7903. Program: RESPLAY is a freeware sound sampling/playback utility by Mark J. Cox
  7904. SeeAlso: AX=8201h,AX=8210h
  7905. --------s-2F8201-----------------------------
  7906. INT 2F - RESPLAY - INSTALLATION CHECK
  7907.     AX = 8201h
  7908. Return: AX = 7746h if installed
  7909. SeeAlso: AX=8202h
  7910. --------s-2F8202-----------------------------
  7911. INT 2F - RESPLAY - UNINSTALL
  7912.     AX = 8202h
  7913. Return:    AX = status
  7914.         1000h successful
  7915. SeeAlso: AX=8201h
  7916. --------s-2F8210-----------------------------
  7917. INT 2F - RESPLAY - INITIALIZE
  7918.     AX = 8210h
  7919.     BL = sound device
  7920.         00h printer port LPT1
  7921.         01h printer port LPT2
  7922.         02h prototype board at I/O address 0300h
  7923.         03h printer port (alternative LPT1)
  7924.         04h internal speaker
  7925.     BH = sample rate in multiples of 250 Hz (14h to A0h)
  7926.     CL = direction
  7927.         00h playback
  7928.         01h sample
  7929. Return: AX = status
  7930.         1000h successful
  7931.         2000h parameter out of range
  7932.         other RESPLAY not installed
  7933. SeeAlso: AX=8200h
  7934. ----------2F86-------------------------------
  7935. INT 2F U - ???
  7936.     AH = 86h
  7937.     AL = function (at least 06h and 07h)
  7938.     ???
  7939. Return: ???
  7940. Note:    called by Codeview for Windows
  7941. SeeAlso: AH=44h
  7942. --------U-2F8900-----------------------------
  7943. INT 2F - WHOA!.COM - INSTALLATION CHECK
  7944.     AX = 8900h
  7945. Return: AL = 00h not installed
  7946.        = FFh installed
  7947. Program: WHOA!.COM is a system slow-down utility by Brad D Crandall
  7948. SeeAlso: AX=8901h,AX=8902h
  7949. --------U-2F8901-----------------------------
  7950. INT 2F - WHOA!.COM - UNINSTALL
  7951.     AX = 8901h
  7952. Return: AL = FDh successful
  7953.        = FEh error
  7954. Program: WHOA!.COM is a system slow-down utility by Brad D Crandall
  7955. SeeAlso: AX=8900h
  7956. --------U-2F8902-----------------------------
  7957. INT 2F - WHOA!.COM - SET DELAY COUNT
  7958.     AX = 8902h
  7959.     BX = delay count (larger values slow system down more)
  7960. Return: AL = FDh successful
  7961.        = FEh error
  7962. Program: WHOA!.COM is a system slow-down utility by Brad D Crandall
  7963. SeeAlso: AX=8900h
  7964. --------U-2F9000-----------------------------
  7965. INT 2F U - RAID - INSTALLATION CHECK
  7966.     AX = 9000h
  7967. Return: AL = FFh if installed
  7968. Program: RAID (Resident AID) is a TSR utility program by Ross Neilson Wentworth
  7969.       that resides mostly in EMS
  7970. --------U-2F9001-----------------------------
  7971. INT 2F U - RAID - GET ???
  7972.     AX = 9001h
  7973. Return: DX:AX -> ???
  7974. SeeAlso: AX=9000h
  7975. --------U-2F9002-----------------------------
  7976. INT 2F U - RAID - GET RESIDENT SEGMENT
  7977.     AX = 9002h
  7978. Return: AX = segment of resident (conventional memory) portion
  7979. SeeAlso: AX=9000h
  7980. --------U-2F9003-----------------------------
  7981. INT 2F U - RAID - UNINSTALL
  7982.     AX = 9003h
  7983. Return: ???
  7984. SeeAlso: AX=9000h
  7985. --------U-2F9004-----------------------------
  7986. INT 2F U - RAID - GET ???
  7987.     AX = 9004h
  7988. Return: AX = first available paragraph past end of resident portion???
  7989.     CX destroyed
  7990. SeeAlso: AX=9000h
  7991. --------e-2F92-------------------------------
  7992. INT 2F - Couriers LAN E-Mail - API
  7993.     AH = 92h
  7994.     AL = function
  7995.         00h installation check
  7996.         01h uninstall
  7997.         02h pop down MICRO.EXE notification window
  7998.         03h ???
  7999.         04h ???
  8000.         05h ???
  8001. Return: ???
  8002. SeeAlso: AH=9Ch
  8003. Index:    installation check;Couriers LAN E-Mail|uninstall;Couriers LAN E-Mail
  8004. --------R-2F92-------------------------------
  8005. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8006.     AH = 92h
  8007.     AL = function (00h-1Eh)
  8008.     ???
  8009. Return: ???
  8010.     AX = FFFFh if not a valid function number in AL
  8011. SeeAlso: INT 16/AX=FF70h
  8012. --------V-2F93-------------------------------
  8013. INT 2F - InnerMission v1.7+ - INSTALLATION CHECK
  8014.     AH = 93h
  8015.     BX = CX = AX
  8016. Return: AL = FFh if installed and BX=CX=AX on entry
  8017.         BX = segment of resident code
  8018.        = 01h if installed but BX or CX differ from AX
  8019. Program: InnerMission is a shareware graphical screen blanker by Kevin Stokes
  8020. --------e-2F9400-----------------------------
  8021. INT 2F - MICRO.EXE - INSTALLATION CHECK
  8022.     AX = 9400h
  8023. Return: AL = 07h or 08h if installed
  8024. Program: MICRO.EXE is a TSR of the Microsoft Mail part of Workgroup Connection,
  8025.       bundled with MS-DOS 6.0
  8026. SeeAlso: AX=9401h,AX=9402h,AX=9403h,AX=9404h,INT 21/AH=3Fh"WORKGRP.SYS"
  8027. --------e-2F9401-----------------------------
  8028. INT 2F - MICRO.EXE - SET ??? FLAG
  8029.     AX = 9401h
  8030. SeeAlso: AX=9400h,AX=9403h
  8031. --------e-2F9402-----------------------------
  8032. INT 2F - MICRO.EXE - ???
  8033.     AX = 9402h
  8034.     ???
  8035. Return: ???
  8036. SeeAlso: AX=9400h
  8037. --------e-2F9403-----------------------------
  8038. INT 2F - MICRO.EXE - SET ??? FLAG
  8039.     AX = 9403h
  8040. SeeAlso: AX=9400h,AX=9404h
  8041. --------e-2F9404-----------------------------
  8042. INT 2F - MICRO.EXE - CLEAR ??? FLAG
  8043.     AX = 9404h
  8044.     ES:DI -> name of executable from which MICRO.EXE was started
  8045. Note:    if the specified name is identical to the name of the program file
  8046.       from which MICRO was started, the ??? flag is cleared; otherwise,
  8047.       it is left unchanged
  8048. SeeAlso: AX=9400h,AX=9403h
  8049. --------e-2F9C-------------------------------
  8050. INT 2F - Couriers LAN E-Mail OPERATOR.EXE - API
  8051.     AH = 9Ch
  8052.     AL = subfunction
  8053.         01h uninstall
  8054. Return: ???
  8055. SeeAlso: AH=92h
  8056. Index:    uninstall;Couriers LAN E-Mail OPERATOR.EXE
  8057. --------E-2FA1--BX0081-----------------------
  8058. INT 2F - Ergo DOS extenders - INSTALLATION CHECK
  8059.     AH = A1h
  8060.     BX = 0081h
  8061.     AL = which
  8062.         FEh OS/286,OS/386
  8063.         FFh HummingBoard DOS extender
  8064.     ES:DI -> 16-byte buffer
  8065. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  8066. Note:    since TKERNEL is a licensed version, it is likely that subfunctions
  8067.       BX=0082h and BX=0084h are present and function identically to the
  8068.       AX=FBA1h/BX=008xh calls
  8069. SeeAlso: AX=ED00h,AX=FBA1h,INT 15/AX=BF02h
  8070. --------m-2FA189-----------------------------
  8071. INT 2F U - Biologic HRAMDEV.SYS - API
  8072.     AX = A189h
  8073.     BX = subfunction
  8074.         0000h set ???
  8075.         0001h remove ???
  8076.         0002h get status ???
  8077.         0003h enable ???
  8078.         0004h disable ???
  8079.         0005h set ??? flag
  8080.         0006h clear ??? flag
  8081.         0007h set ??? flag
  8082.         0008h clear ??? flag
  8083.         0009h set ???
  8084.     ES:DI -> function-specific arguments
  8085.         if func 0000h: 20-byte buffer containing ???
  8086.         if func 0001h: 20-byte buffer for returned ???
  8087.         if func 0002h: 16-byte buffer for returned ???
  8088.         if func 0009h: WORD containing ???
  8089. Return: BX = A189h if installed
  8090.     AH = status
  8091.         00h successful
  8092.         FFh failed or invalid function number
  8093. Program: HRAMDEV.SYS is a part of the shareware package HRAM by Biologic which
  8094.       provides improved high memory access under MS-DOS 5.0
  8095. Note:    functions 00h and 01h use a stack of four entries; function 01h always
  8096.       removes the values stored with the most recent function 00h call
  8097.       which has not yet been matched with a function 01h call.
  8098. --------U-2FA4E0-----------------------------
  8099. INT 2F - Futurus Team - INSTALLATION CHECK
  8100.     AX = A4E0h
  8101. Return: AL = 52h ("R") if installed
  8102.         AH = major version plus 30h ("0")
  8103.         ES:BX -> ??? (INT A4 handler???)
  8104. Note:    older versions of Right Hand Man (from which Team evolved) store the
  8105.       signature "RH" at offset 103h in the INT 2F handler's segment
  8106. SeeAlso: INT A4"Right Hand Man"
  8107. ----------2FA900-----------------------------
  8108. INT 2F - METZTSR.COM - INSTALLATION CHECK
  8109.     AX = A900h
  8110.     CF set
  8111. Return: CF clear if resident
  8112.         AX = 97FFh
  8113.     CF set if not present
  8114. Notes:    METZTSR.COM prevents METZ applications (such as the MAGIC screen
  8115.       saver) inactivity timeout while running a DOSapp under MS Windows.
  8116.     the default multiplex number is A9h, but may be set to any value from
  8117.       80h to FFh with a commandline switch
  8118. SeeAlso: AX=A901h,AX=A902h
  8119. ----------2FA901-----------------------------
  8120. INT 2F - METZTSR.COM - GET TIME OF LAST KEYBOARD ACTIVITY
  8121.     AX = A901h
  8122.     CF set
  8123. Return: CF clear if successful
  8124.         AX:DX = BIOS time at which INT 09 was last invoked
  8125.     CF set if not present
  8126. SeeAlso: INT 09,INT 1A/AH=00h
  8127. ----------2FA902-----------------------------
  8128. INT 2F - METZTSR.COM - SET METZ Ctrl-Alt-Del FLAG
  8129.     AX = A902h
  8130.     BL = new value
  8131.         00h Ctrl-Alt-Del not allowed
  8132.         else Ctrl-Alt-Del allowed (startup default is 01h)
  8133.     CF set
  8134. Return: CF clear if successful
  8135.         AX = 97FFh
  8136.     CF set if not resident
  8137. SeeAlso: AX=A903h
  8138. ----------2FA903-----------------------------
  8139. INT 2F - METZTSR.COM - GET METZ Ctrl-Alt-Del FLAG
  8140.     AX = A903h
  8141.     CF set
  8142. Return: CF clear if successful    
  8143.         AX = 97FFh if Ctrl-Alt-Del allowed
  8144.         AX = 0000h if Ctrl-Alt-Del not allowed
  8145.     CF set if not resident
  8146. SeeAlso: AX=A902h
  8147. --------U-2FAA00-----------------------------
  8148. INT 2F - VIDCLOCK.COM - INSTALLATION CHECK
  8149.     AX = AA00h
  8150. Return: AL = 00h not installed
  8151.          FFh installed
  8152. Program: VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III
  8153. --------f-2FAB00-----------------------------
  8154. INT 2F - Btrieve Multi-User - INSTALLATION CHECK
  8155.     AX = AB00h
  8156. Return: AL = 4Dh if installed
  8157. SeeAlso: AX=AB01h,AX=AB02h,INT 7B"Btrieve"
  8158. --------f-2FAB01-----------------------------
  8159. INT 2F - Btrieve Multi-User - EXECUTE Btrieve OPERATION
  8160.     AX = AB01h
  8161.     BX = process ID
  8162.     DS:DX -> 38-byte parameter record (see INT 7B"Btrieve")
  8163. Return: AL = 00h OK
  8164.        = other retry after calling INT 7F/AX=0200h
  8165. SeeAlso: AX=AB00h,AX=AB02h,INT 7B"Btrieve",INT 7F/AX=0200h
  8166. --------f-2FAB02-----------------------------
  8167. INT 2F - Btrieve Multi-User - GET NEW PROCESS ID
  8168.     AX = AB02h
  8169. Return: AL = 00h succesful
  8170.         BX = process ID
  8171.     AL > 00h failed, retry after calling INT 7F/AX=0200h
  8172. SeeAlso: AX=AB00h,AX=AB01h,INT 7B"Btrieve",INT 7F/AX=0200h
  8173. --------V-2FAC00-----------------------------
  8174. INT 2F - DOS 4.01+ GRAPHICS.COM - INSTALLATION CHECK
  8175.     AX = AC00h
  8176. Return: AX = FFFFh
  8177.     ES:DI -> ??? (graphics data?) (not documented)
  8178. Note:    this installation check was moved here to avoid the conflict with the
  8179.       CD-ROM extensions that occurred in DOS 4.00
  8180. SeeAlso: AX=1500h"GRAPHICS"
  8181. --------V-2FAD00-----------------------------
  8182. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK
  8183.     AX = AD00h
  8184. Return: AL = FFh if installed
  8185.         BX = ??? (0100h in MS-DOS 3.30, PC-DOS 4.01)
  8186. Note:    DOS 5.0 DISPLAY.SYS chains to previous handler if AL is not one of the
  8187.       subfunctions listed here
  8188. --------O-2FAD00-----------------------------
  8189. INT 2F U - DR-DOS 3.41,5.0 KEYB - INSTALLATION CHECK
  8190.     AX = AD00h
  8191. Return: AX = FFFFh if installed
  8192. SeeAlso: AX=AD80h
  8193. --------V-2FAD01-----------------------------
  8194. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - SET ACTIVE CODE PAGE
  8195.     AX = AD01h
  8196.     BX = new code page
  8197. Return: CF clear if successful
  8198.         AX = 0001h
  8199.     CF set on error (unsupported code page)
  8200.         AX = 0000h
  8201. SeeAlso: AX=AD02h
  8202. ----------2FAD01-----------------------------
  8203. INT 2F U - DR-DOS 3.41,5.0 KEYB - GET CONFIGURATION
  8204.     AX = AD01h
  8205. Return: BX = current code page
  8206.     CX = current keyboard layout (0100h = US, 0102h = foreign)
  8207.     ES = resident code segment
  8208. SeeAlso: AX=AD83h
  8209. --------V-2FAD02-----------------------------
  8210. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET ACTIVE CODE PAGE
  8211.     AX = AD02h
  8212. Return: CF set if code page never set
  8213.         AX = 0001h
  8214.         BX = FFFFh (assume first hardware code page)
  8215.     CF clear if successful
  8216.         BX = current code page
  8217. SeeAlso: AX=AD01h,AX=AD03h
  8218. --------V-2FAD03-----------------------------
  8219. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET CODE PAGE INFORMATION
  8220.     AX = AD03h
  8221.     ES:DI -> buffer for code page information (see below)
  8222.     CX = size of buffer in bytes
  8223. Return: CF set if buffer too small
  8224.     CF clear if successful
  8225.         ES:DI buffer filled
  8226. SeeAlso: AX=AD01h,AX=AD02h
  8227.  
  8228. Format of DOS 5.0 code page information:
  8229. Offset    Size    Description
  8230.  00h    WORD    number of software code pages
  8231.  02h    WORD    ??? (0003h)
  8232.  04h    WORD    number of hardware code pages
  8233.  06h  N WORDs    hardware code page numbers
  8234.       N WORDs    software (prepared) code pages (FFFFh if not yet prepared)
  8235. --------V-2FAD04-----------------------------
  8236. INT 2F U - DOS 4.x only DISPLAY.SYS internal - ???
  8237.     AX = AD04h
  8238.     ???
  8239. Return: ???
  8240. --------V-2FAD10-----------------------------
  8241. INT 2F U - DOS 4.x DISPLAY.SYS internal - INSTALLATION CHECK???
  8242.     AX = AD10h
  8243.     ???
  8244. Return: AX = FFFFh
  8245.     BX = ??? (0100h in PC-DOS 4.01)
  8246. --------V-2FAD10-----------------------------
  8247. INT 2F U - DOS 5.0 DISPLAY.SYS internal - ???
  8248.     AX = AD10h
  8249.     ???
  8250. Return: CF clear if successful
  8251.     CF set on error
  8252. Note:    this function is a NOP if the active code page has never been set
  8253.       (AX=AD02h returns BX=FFFFh); its purpose otherwise is not known
  8254. --------V-2FAD40-----------------------------
  8255. INT 2F - DOS 4+ - ???
  8256.     AX = AD40h
  8257.     DX = ???
  8258.     ???
  8259. Return: ???
  8260. Note:    called by PC-DOS 4.01 PRINT.COM
  8261. --------K-2FAD80-----------------------------
  8262. INT 2F u - DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK
  8263.     AX = AD80h
  8264. Return: AL = FFh if installed
  8265.         BX = version number (BH = major, BL = minor)
  8266.         ES:DI -> internal data (see below)
  8267. Notes:    MS-DOS 3.30, PC-DOS 4.01, and MS-DOS 5.00 all report version 1.00.
  8268.     undocumented prior to the release of DOS 5.0
  8269.  
  8270. Format of KEYB internal data:
  8271. Offset    Size    Description
  8272.  00h    DWORD    original INT 09
  8273.  04h    DWORD    original INT 2F
  8274.  08h  6 BYTEs    ???
  8275.  0Eh    WORD    flags
  8276.  10h    BYTE    ???
  8277.  11h    BYTE    ???
  8278.  12h  4 BYTEs    ???
  8279.  16h  2 BYTEs    country ID letters
  8280.  18h    WORD    current code page
  8281. ---DOS 3.3---
  8282.  1Ah    WORD    pointer to first item in list of code page tables???
  8283.  1Ch    WORD    pointer to ??? item in list of code page tables
  8284.  1Eh  2 BYTEs    ???
  8285.  20h    WORD    pointer to key translation data
  8286.  22h    WORD    pointer to last item in code page table list (see below)
  8287.  24h  9 BYTEs    ???
  8288. ---DOS 4.01---
  8289.  1Ah  2 BYTEs    ???
  8290.  1Ch    WORD    pointer to first item in list of code page tables???
  8291.  1Eh    WORD    pointer to ??? item in list of code page tables
  8292.  20h  2 BYTEs    ???
  8293.  22h    WORD    pointer to key translation data
  8294.  24h    WORD    pointer to last item in code page table list (see below)
  8295.  26h  9 BYTEs    ???
  8296.  
  8297. Format of code page table list entries:
  8298. Offset    Size    Description
  8299.  00h    WORD    pointer to next item, FFFFh = last
  8300.  02h    WORD    code page
  8301.  04h  2 BYTEs    ???
  8302.  
  8303. Format of translation data:
  8304. Offset    Size    Description
  8305.  00h    WORD    size of data in bytes, including this word
  8306.  02h N-2 BYTEs    ???
  8307. --------K-2FAD81-----------------------------
  8308. INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD CODE PAGE
  8309.     AX = AD81h
  8310.     BX = code page (see INT 21/AX=6601h)
  8311. Return: CF set on error
  8312.         AX = 0001h (code page not available)
  8313.     CF clear if successful
  8314. Notes:    called by DISPLAY.SYS
  8315.     undocumented prior to the release of DOS 5.0
  8316. SeeAlso: AX=AD82h
  8317. --------K-2FAD82-----------------------------
  8318. INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD MAPPING
  8319.     AX = AD82h
  8320.     BL = new state
  8321.         00h US keyboard (Control-Alt-F1)
  8322.         FFh foreign keyboard (Control-Alt-F2)
  8323. Return: CF set on error (BL not 00h or FFh)
  8324.     CF clear if successful
  8325. Note:    undocumented prior to the release of DOS 5.0
  8326. SeeAlso: AX=AD81h,AX=AD83h
  8327. --------K-2FAD83-----------------------------
  8328. INT 2F - DOS 5+ KEYB.COM - GET KEYBOARD MAPPING
  8329.     AX = AD83h
  8330. Return: BL = current state
  8331.         00h US keyboard
  8332.         FFh foreign keyboard
  8333. SeeAlso: AX=AD82h
  8334. --------l-2FAE00DXFFFF-----------------------
  8335. INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALLATION CHECK
  8336.     AX = AE00h
  8337.     DX = FFFFh
  8338.     CH = FFh
  8339.     CL = length of command line tail (4DOS v4.0)
  8340.     DS:BX -> command line buffer (see below)
  8341.     DS:SI -> command name buffer (see below)
  8342.     DI = 0000h (4DOS v4.0)
  8343. Return: AL = FFh if this command is a TSR extension to COMMAND.COM
  8344.     AL = 00h if the command should be executed as usual
  8345. Notes:    This call provides a mechanism for TSRs to install permanent
  8346.       extensions to the command repertoire of COMMAND.COM.    It appears
  8347.       that COMMAND.COM makes this call before executing the current
  8348.       command line, and does not execute it itself if the return is FFh.
  8349.     APPEND hooks this call, to allow subsequent APPEND commands to
  8350.       execute without re-running APPEND
  8351.  
  8352. Format of command line buffer:
  8353. Offset    Size    Description
  8354.  00h    BYTE    max length of command line, as in INT 21/AH=0Ah
  8355.  01h    BYTE    count of bytes to follow, excluding terminating 0Dh
  8356.       N BYTEs    command line text, terminated by 0Dh
  8357.  
  8358. Format of command name buffer:
  8359. Offset    Size    Description
  8360.  00h    BYTE    length of command name
  8361.  01h  N BYTEs    uppercased command name (blank-padded to 11 chars by 4DOS v4)
  8362. --------l-2FAE01DXFFFF-----------------------
  8363. INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE
  8364.     AX = AE01h
  8365.     DX = FFFFh
  8366.     CH = 00h
  8367.     CL = length of command name (4DOS v4.0)
  8368.     DS:SI -> command name buffer (see AX=AE00h)
  8369.     DS:BX -> command line buffer (see AX=AE00h)
  8370. Return: DS:SI buffer updated
  8371.       if length byte is nonzero, the following bytes contain the uppercase
  8372.       internal command to execute and the command line buffer contains the
  8373.       command's parameters (the first DS:[SI] bytes are ignored)
  8374. Notes:    this call requests execution of the command which a previous call to
  8375.       AX=AE00h indicated was resident
  8376.     APPEND hooks this call
  8377. ----------2FAF-------------------------------
  8378. INT 2F U - ???
  8379.     AH = AFh !!!
  8380.     ???
  8381. Return: ???
  8382. --------V-2FB000-----------------------------
  8383. INT 2F - DOS 3.3+ GRAFTABL.COM - INSTALLATION CHECK
  8384.     AX = B000h
  8385. Return: AL = 00h not installed, OK to install
  8386.        = 01h not installed, not OK to install
  8387.        = FFh installed
  8388. Notes:    called by DISPLAY.SYS
  8389.     documented for DOS 5.0, but undocumented in prior versions
  8390. SeeAlso: AX=B001h
  8391. --------V-2FB001-----------------------------
  8392. INT 2F - DOS 3.3+ GRAFTABL.COM - GET GRAPHICS FONT TABLE
  8393.     AX = B001h
  8394.     DS:BX -> DWORD buffer for address of 8x8 font table
  8395. Return: buffer filled
  8396.     AL = FFh
  8397. Note:    PC-DOS 3.30/4.01 set the font table offset to 0130h, MS-DOS 3.30 to
  8398.       0030h
  8399. SeeAlso: AX=B000h
  8400. --------I-2FB400-----------------------------
  8401. INT 2F - IBM PC3270 EMULATION PROG v3 - INSTALLATION CHECK
  8402.     AX = B400h
  8403. Return: AL = FFh if installed
  8404. --------I-2FB401-----------------------------
  8405. INT 2F - IBM PC3270 EMULATION PROG v3 - GET HOST BUFFER ADDRESS
  8406.     AX = B401h
  8407. Return: ES -> host screen buffer (PC ASCII format)
  8408.     ES unchanged if communications not started
  8409. --------I-2FB402-----------------------------
  8410. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  8411.     AX = B402h
  8412.     BX = ???
  8413. Return: ???
  8414. --------I-2FB403-----------------------------
  8415. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  8416.     AX = B403h
  8417.     ???
  8418. Return: ???
  8419. --------I-2FB404-----------------------------
  8420. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  8421.     AX = B404h
  8422.     ???
  8423. Return: ???
  8424. --------I-2FB405-----------------------------
  8425. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  8426.     AX = B405h
  8427.     ???
  8428. Return: ???
  8429. ----------2FB700-----------------------------
  8430. INT 2F - APPEND - INSTALLATION CHECK
  8431.     AX = B700h
  8432. Return: AL = status
  8433.         00h not installed
  8434.         FFh installed
  8435. Note:    MS-DOS 3.30 APPEND refuses to install itself when run inside TopView or
  8436.       a TopView-compatible environment
  8437. ----------2FB701-----------------------------
  8438. INT 2F U - APPEND v3.21 only - GET APPEND PATH
  8439.     AX = B701h
  8440. Return: ES:DI -> active APPEND path
  8441. Notes:    the only version of APPEND known to support this call is the APPEND
  8442.       shipped with Microtek MS-DOS 3.21; MS-DOS 3.30-6.00 APPEND displays
  8443.       "Incorrect APPEND Version" and aborts the caller
  8444.     use AX=B704h first, and only call this function if that one is not
  8445.       supported
  8446. SeeAlso: AX=B704h
  8447. ----------2FB702-----------------------------
  8448. INT 2F - APPEND - VERSION CHECK
  8449.     AX = B702h
  8450. Return: AX = FFFFh if not DOS 4.0 APPEND (also if DOS 5.0 APPEND)
  8451.     AL = major version number
  8452.     AH = minor version number, otherwise
  8453. SeeAlso: AX=B710h
  8454. ----------2FB703-----------------------------
  8455. INT 2F U - DOS 3.3, DOS 5.0 APPEND - HOOK INT 21
  8456.     AX = B703h
  8457.     ES:DI -> INT 21 handler APPEND should chain to
  8458. Return: ES:DI -> APPEND's INT 21 handler
  8459. Note:    each invocation of this function toggles a flag which APPEND uses to
  8460.       determine whether to chain to the user handler or the original
  8461.       INT 21
  8462. ----------2FB704-----------------------------
  8463. INT 2F - DOS 3.3+ APPEND - GET APPEND PATH
  8464.     AX = B704h
  8465. Return: ES:DI -> active APPEND path (128 bytes max)
  8466. Note:    some versions of append do not support this call, and return ES
  8467.       unchanged; in this case, you should call AX=B701h to get the APPEND
  8468.       path
  8469. SeeAlso: AX=B701h
  8470. ----------2FB706-----------------------------
  8471. INT 2F - DOS 4+ APPEND - GET APPEND FUNCTION STATE
  8472.     AX = B706h
  8473. Return: BX = APPEND state
  8474.         bit 0: set if APPEND enabled
  8475.         bits 1-11 reserved
  8476.         bit 12: (DOS 5.0) set if APPEND applies directory search even if a
  8477.             drive has been specified
  8478.         bit 13: set if /PATH flag active
  8479.         bit 14: set if /E flag active (environment var APPEND exists)
  8480.         bit 15: set if /X flag active
  8481. ----------2FB707-----------------------------
  8482. INT 2F - DOS 4+ APPEND - SET APPEND FUNCTION STATE
  8483.     AX = B707h
  8484.     BX = APPEND state bits (see AX=B706h)
  8485. ----------2FB710-----------------------------
  8486. INT 2F U - DOS 3.3+ APPEND - GET VERSION INFO
  8487.     AX = B710h
  8488. Return: AX = current APPEND state (see AX=B706h)
  8489.     BX = ??? (0000h in MS-DOS 3.30 and 5.00)
  8490.     CX = ??? (0000h in MS-DOS 3.30 and 5.00)
  8491.     DL = major version
  8492.     DH = minor version
  8493. SeeAlso: AX=B702h
  8494. ----------2FB711-----------------------------
  8495. INT 2F - DOS 4+ APPEND - SET RETURN FOUND NAME STATE
  8496.     AX = B711h
  8497. Note:    if the next INT 21h call (and ONLY the next) is function 3Dh, 43h, or
  8498.     6Ch (also 4B03h and 4Eh if /X active), the fully qualified filename is
  8499.     written over top of the filename passed to the INT 21h call.  The
  8500.     application must provide a sufficiently large buffer.  This state is
  8501.     reset after the next INT 21h call processed by APPEND.
  8502. BUG:    DOS 4.0 APPEND reportedly overwrites DS:DX instead of DS:SI for
  8503.       INT 21/AH=6Ch
  8504. SeeAlso: INT 21/AH=4Eh
  8505. --------N-2FB800-----------------------------
  8506. INT 2F - network - INSTALLATION CHECK
  8507.     AX = B800h
  8508. Return: AL = status
  8509.         00h        not installed
  8510.         nonzero installed
  8511.           BX = installed component flags (test in this order!)
  8512.            bit 6   server
  8513.            bit 2   messenger
  8514.            bit 7   receiver
  8515.            bit 3   redirector
  8516.            bit 1   LANPUP (LANtastic 4.0)
  8517. Notes:    this function is supported by SilverNET
  8518.     LANtastic and NetWare Lite use only BL for the return value, preserving
  8519.       BH; LAN Manager and DOS LAN Requester return BH=0.  This permits
  8520.       differentiation between those two groups by setting BH to a nonzero
  8521.       value before the call and checking its value on return.
  8522. SeeAlso: AX=4E53h,AX=B809h
  8523. --------N-2FB803-----------------------------
  8524. INT 2F - network - GET NETWORK EVENT POST HANDLER
  8525.     AX = B803h
  8526. Return: ES:BX -> event post handler (see AX=B804h)
  8527. SeeAlso: AX=B804h,AX=B903h
  8528. --------N-2FB804-----------------------------
  8529. INT 2F - network - SET NETWORK EVENT POST HANDLER
  8530.     AX = B804h
  8531.     ES:BX -> new event post handler
  8532. Notes:    used in conjunction with AX=B803h to hook into the network event post
  8533.       routine
  8534.     The specified handler is called on any network event.  Two events are
  8535.       defined: message received and critical network error.
  8536. SeeAlso: AX=B803h,AX=B904h
  8537.  
  8538. Values post routine is called with:
  8539.     AX = 0000h single block message
  8540.         DS:SI -> ASCIZ originator name
  8541.         DS:DI -> ASCIZ destination name
  8542.         ES:BX -> text header (see below)
  8543.     AX = 0001h start multiple message block
  8544.         CX = block group ID
  8545.         DS:SI -> ASCIZ originator name
  8546.         DS:DI -> ASCIZ destination name
  8547.     AX = 0002h multiple block text
  8548.         CX = block group ID
  8549.         ES:BX -> text header (see below)
  8550.     AX = 0003h end multiple block message
  8551.         CX = block group ID
  8552.     AX = 0004h message aborted due to error
  8553.         CX = block group ID
  8554.     AX = 0101h server received badly formatted network request
  8555.         Return: AX = FFFFh (PC LAN will process error)
  8556.     AX = 0102h unexpected network error
  8557.         ES:BX -> NCB (see INT 5C)
  8558.     AX = 0103h server received INT 24 error
  8559.         other registers as for INT 24, except AH is in BH
  8560.         Return: as below, but only 0000h and FFFFh allowed
  8561. Return:    AX = response code
  8562.         0000h user post routine processed message
  8563.         0001h PC LAN will process message, but message window not displayed
  8564.         FFFFh PC LAN will process message
  8565.     
  8566. Format of text header:
  8567. Offset    Size    Description
  8568.  00h    WORD    length of text (maximum 512 bytes)
  8569.  02h  N BYTEs    text of message
  8570. Note:    all CRLF sequences in message text are replaced by 14h
  8571. --------N-2FB807-----------------------------
  8572. INT 2F - network - GET NetBIOS NAME NUMBER OF MACHINE NAME
  8573.     AX = B807h
  8574. Return: CH = NetBIOS name number of the machine name
  8575. SeeAlso: INT 21/AX=5E00h
  8576. --------N-2FB808-----------------------------
  8577. INT 2F U - network - RELINK KEYBOARD HANDLER
  8578.     AX = B808h
  8579.     ES:BX -> INT 09 handler network should call after it finishes INT 09
  8580. Notes:    this call replaces the address to which the network software chains on
  8581.       an INT 09 without preserving the original value.  This allows a prior
  8582.       handler to unlink, but does not allow a new handler to be added
  8583.       such that the network gets the INT 09 first unless the new handler
  8584.       completely takes over INT 09 and never chains.
  8585.     called by DOS 3.2 KEYBxx.COM
  8586. SeeAlso: AX=B908h
  8587. --------N-2FB809-----------------------------
  8588. INT 2F - LANtastic Network, NetWare Lite - VERSION CHECK
  8589.     AX = B809h
  8590. Return: AH = major version
  8591.     AL = minor version (decimal)
  8592. Note:    this function is also supported by SilverNET
  8593. SeeAlso: AX=4E53h,AX=B800h,AX=B809h"LAN Manager"
  8594. --------N-2FB809-----------------------------
  8595. INT 2F - PC LAN Program, LAN Manager, DOS LAN Requester - VERSION CHECK
  8596.     AX = B809h
  8597. Return: AH = minor version (decimal)
  8598.     AL = major version
  8599. SeeAlso: AX=4E53h,AX=B800h,AX=B809h"LANtastic"
  8600. --------N-2FB80F-----------------------------
  8601. INT 2F - DOS LAN Requester - GET START PARAMETERS
  8602.     AX = B80Fh
  8603.     CX = size of return data buffer
  8604.     ES:DI -> return data buffer
  8605. Return: AX = status
  8606.          00h     network started
  8607.          nonzero network not started
  8608.     CX = number of bytes returned in buffer
  8609.     ES:DI buffer filled
  8610.  
  8611. Format of return data buffer:
  8612. Offset    Size    Description
  8613.  00h    BYTE    major version
  8614.  01h    BYTE    minor version
  8615.  02h    WORD    configuration flags given when network was started (see below)
  8616.  04h 15 BYTEs    NET START machine name (space padded)
  8617.  13h    BYTE    00h
  8618.  14h 9    BYTEs    NET START domain name (NULL padded)
  8619.  1Dh    BYTE    00h
  8620.  1Eh 32 BYTEs    /WRK heuristics string (space padded, not terminated)
  8621.  3Eh    WORD    /SRV value
  8622.  40h    WORD    /ASG value
  8623.  42h    WORD    /NBC value
  8624.  44h    WORD    /NBS value
  8625.  46h    WORD    /BBC value
  8626.  48h    WORD    /BBS value
  8627.  4Ah    WORD    /PBC value
  8628.  4Ch    WORD    /PBS value
  8629.  4Eh    WORD    /PFS value
  8630.  50h    WORD    /PFT value
  8631.  52h    WORD    /PWT value
  8632.  54h    WORD    /KUC value
  8633.  56h    WORD    /KST value
  8634.  58h    WORD    /NVS value
  8635.  5Ah    WORD    /NMS value
  8636.  5Ch    WORD    /NDB value
  8637.  5Eh    WORD    /MBI value
  8638.  60h    BYTE    NetBIOS name number for machine name
  8639.  61h    BYTE    NetBIOS name number for domain name
  8640.  62h    WORD    NetBIOS sessions required for configuration
  8641.  64h    WORD    NetBIOS commands required for configuration
  8642.  66h    WORD    NetBIOS names required for configuration
  8643.  68h 128 BYTEs    NET START path (LANROOT)
  8644.  E8h    BYTE    00h
  8645.  
  8646. Bitfields for configuration flags:
  8647.  bit 0    /NVS != 0
  8648.  bit 1    /NMS != 0
  8649.  bit 2    /API
  8650.  bit 3    /HIM
  8651.  bit 4    /LIM
  8652.  bit 5    /ENC
  8653.  bit 6    /POP
  8654.  bit 7    /EMS
  8655.  bit 8    /RPL
  8656.  bits 9-12 reserved
  8657.  bit 13    RDR started
  8658.  bit 14    RCV started
  8659.  bit 15    User is currently logged on
  8660. --------N-2FB900-----------------------------
  8661. INT 2F - PC Network RECEIVER.COM - INSTALLATION CHECK
  8662.     AX = B900h
  8663. Return: AL = 00h if not installed
  8664.          FFh if installed
  8665. --------N-2FB901-----------------------------
  8666. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM INT 2F HANDLER ADDRESS
  8667.     AX = B901h
  8668. Return: AL = ???
  8669.     ES:BX -> RECEIVER.COM INT 2F handler
  8670. Note:    allows more efficient execution by letting the caller bypass any other
  8671.       INT 2F handlers which have been added since RECEIVER.COM was
  8672.       installed
  8673. --------N-2FB903-----------------------------
  8674. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM POST ADDRESS
  8675.     AX = B903h
  8676. Return: ES:BX -> POST handler
  8677. SeeAlso: AX=B803h,AX=B904h
  8678. --------N-2FB904-----------------------------
  8679. INT 2F - PC Network RECEIVER.COM - SET RECEIVER.COM POST ADDRESS
  8680.     AX = B904h
  8681.     ES:BX -> new POST handler
  8682. SeeAlso: AX=B804h,AX=B903h
  8683. --------N-2FB905-----------------------------
  8684. INT 2F - PC Network RECEIVER.COM - GET FILENAME
  8685.     AX = B905h
  8686.     DS:BX -> 128-byte buffer for filename 1
  8687.     DS:DX -> 128-byte buffer for filename 2
  8688. Return: buffers filled from RECEIVER.COM internal buffers
  8689. Note:    use of filenames is unknown, but one appears to be for storing messages
  8690. SeeAlso: AX=B906h
  8691. --------N-2FB906-----------------------------
  8692. INT 2F - PC Network RECEIVER.COM - SET FILENAME
  8693.     AX = B906h
  8694.     DS:BX -> 128-byte buffer for filename 1
  8695.     DS:DX -> 128-byte buffer for filename 2
  8696. Return: RECEIVER.COM internal buffers filled from user buffers
  8697. Note:    use of filenames is unknown, but one appears to be for storing messages
  8698. SeeAlso: AX=B905h
  8699. --------N-2FB908-----------------------------
  8700. INT 2F - PC Network RECEIVER.COM - UNLINK KEYBOARD HANDLER
  8701.     AX = B908h
  8702.     ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09
  8703. Note:    this call replaces the address to which RECEIVER.COM chains on an
  8704.       INT 09 without preserving the original value.     This allows a prior
  8705.       handler to unlink, but does not allow a new handler to be added
  8706.       such that RECEIVER gets the INT 09 first.
  8707. SeeAlso: AX=B808h
  8708. --------V-2FBC00-----------------------------
  8709. INT 2F - Windows 3.0, DOS 5+ EGA.SYS - INSTALLATION CHECK
  8710.     AX = BC00h
  8711. Return: AL = 00h not installed, OK to install
  8712.        = 01h not installed, not OK to install
  8713.        = FFh installed
  8714.         BX = 5456h ("TV")
  8715. Note:    AH=BCh is the default value, which may be changed by a command line
  8716.       parameter to any value between 80h and FFh
  8717. SeeAlso: AX=BC06h,INT 10/AH=FAh"EGA"
  8718. --------V-2FBC06-----------------------------
  8719. INT 2F U - MS Windows 3.0, DOS 5+ EGA.SYS - GET VERSION INFO
  8720.     AX = BC06h
  8721. Return: BX = 5456h ("TV")
  8722.     CH = major version
  8723.     CL = minor version
  8724.     DL = revision
  8725. SeeAlso: AX=BC00h,INT 10/AH=FAh"EGA"
  8726. --------U-2FBE00-----------------------------
  8727. INT 2F - REDVIEW - INSTALLATION CHECK
  8728.     AX = BE00h
  8729. Return: AL = FFh if installed
  8730. Program: REDVIEW is a public-domain TSR by Alexandr Novy and Petr Horak which
  8731.       copies data sent to standard output to standard error when the
  8732.       former has been redirected to a file, thus allowing the data to
  8733.       be seen on the screen at the same time it is captured in a file
  8734. --------N-2FBF00-----------------------------
  8735. INT 2F - PC LAN PROGRAM REDIRIFS.EXE internal - INSTALLATION CHECK
  8736.     AX = BF00h
  8737. Return: AL = FFh if installed
  8738. --------N-2FBF01-----------------------------
  8739. INT 2F U - PC LAN PROGRAM REDIRIFS.EXE internal - ???
  8740.     AX = BF01h
  8741.     ???
  8742. Return: ???
  8743. --------N-2FBF80-----------------------------
  8744. INT 2F - PC LAN PROG REDIR.SYS internal - SET REDIRIFS ENTRY POINT
  8745.     AX = BF80h
  8746.     ES:DI -> FAR entry point to IFS handler in REDIRIFS
  8747. Return: AL = FFh if installed
  8748.         ES:DI -> internal workspace
  8749. Note:    all future IFS calls to REDIR.SYS are passed to the ES:DI entry point
  8750. ---------------------------------------------
  8751.